JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5 Canvasの状態を保存・復元する方法(save()とrestore()の使い方)

HTML5 Canvasには、描画の状態を保存・復元するための重要なメソッドとして save()restore() の2つが用意されています。

save() メソッドを呼び出すたびに、その時点のキャンバスの状態(塗りつぶし色、透明度、変換行列など)がスタックに積まれます。そして restore() メソッドを呼び出すたびに、スタックの最後に保存された状態が取り出され、コンテキストがその状態へと戻ります。

save() と restore() の概要

番号メソッドと説明
1 save()
現在の描画状態をスタックにプッシュします。
2 restore()
スタックの先頭にある状態をポップし、コンテキストをその状態に復元します。

サンプルコード

以下のコードを実行すると、HTML5 Canvasにおける状態の保存と復元の動作を確認できます。

<!DOCTYPE HTML>
<html>
   <head>
      <style>
         #test {
            width: 100px;
            height:100px;
            margin: 0px auto;
         }
      </style>
      <script>
         function drawShape(){
            // DOMを使ってcanvas要素を取得
            var canvas = document.getElementById('mycanvas');

            // canvasがサポートされていない場合は実行しない
            if (canvas.getContext){
               // getContextで2D描画コンテキストを取得
               var ctx = canvas.getContext('2d');

               // デフォルト設定で矩形を描画
               ctx.fillRect(0,0,150,150);

               // デフォルトの状態を保存
               ctx.save();

               // 設定を変更して矩形を描画
               ctx.fillStyle = '#66FFFF'
               ctx.fillRect( 15,15,120,120);

               // 現在の状態を保存
               ctx.save();

               // 新しい設定に変更して矩形を描画
               ctx.fillStyle = '#993333'
               ctx.globalAlpha = 0.5;
               ctx.fillRect(30,30,90,90);

               // 直前の状態を復元
               ctx.restore();

               // 復元した設定で矩形を描画
               ctx.fillRect(45,45,60,60);

               // 元の状態を復元
               ctx.restore();

               // 復元した設定で矩形を描画
               ctx.fillRect(40,40,90,90);
            } else {
               alert('このデモを見るにはSafariまたはFirefox 1.5+が必要です。');
            }
         }
      </script>
   </head>
   <body id = "test" onload = "drawShape();">
      <canvas id = "mycanvas"></canvas>
   </body>
</html>

コードの解説

このサンプルでは、次のような流れで状態の保存と復元を行っています。

  1. デフォルト設定(黒)で150×150の矩形を描画し、ctx.save() でその状態を保存します。
  2. fillStyle を水色(#66FFFF)に変更して矩形を描画し、再び ctx.save() で状態を保存します。
  3. fillStyle を暗い赤(#993333)に、globalAlpha を0.5に変更して半透明の矩形を描画します。
  4. ctx.restore() を呼び出すと、直前に保存された水色の状態に戻るため、次に描画する矩形は水色になります。
  5. もう一度 ctx.restore() を呼び出すと、最初に保存されたデフォルトの黒の状態に戻り、以降の描画は黒で行われます。

このように save()restore() を組み合わせることで、一時的にスタイルや変換設定を変更しても、簡単に元の状態へ戻すことができます。複雑な図形やアニメーションを描く際に非常に便利な機能です。

  1. Windowsでレジストリをバックアップ・復元する2つの簡単な方法

    レジストリは、Windowsオペレーティングシステムに不可欠な要素です。Windowsの設定やプログラムに関する情報はすべて、この階層型データベース(レジストリ)に保存されています。各種設定、デバイスドライバーの情報など、システムの動作に重要なデータがすべてここに記録されており、いわば「あらゆるプログラムが記録を残す台帳」とも言えます。Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10といった過去のバージョンすべてに、このレジストリが搭載されています。 さまざまな設定変更はレジストリ経由で行われますが、その操

  2. Windowsレジストリのバックアップと復元方法を徹底解説

    Windowsレジストリに変更を加える予定があるなら、事前に適切なバックアップを作成しておくことが非常に重要です。レジストリはWindows PCの動作において中核的な役割を担っており、破損すると作業全体に深刻な支障をきたす可能性があります。 レジストリのバックアップは、こうしたトラブルに対する保険とも言える存在です。万一問題が発生しても、あらかじめバックアップがあれば、ファイルを復元することで安全に元の状態へ戻すことができます。 本記事では、Windowsレジストリのバックアップ作成方法と、その復元手順について詳しく解説します。それでは始めましょう。 Windowsレジストリのバックアップを