HTML Canvasの描画内容を別のHTML Canvasに描画する
HTML Canvasの描画内容を別のHTML Canvasに描画するコードを紹介します。
概要
こちらの記事ではHTML Canvasをメモリ上に作成するコードを紹介しました。
メモリ上のHTML Canvasの利用例の一つとして、メモリ内で描画した結果を画面に転送するコードの例を紹介します。
プログラム
コード
下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript">
var mem_canvas;
function createCanvas() {
mem_canvas = document.createElement("canvas");
mem_canvas.width = 64;
mem_canvas.height = 64;
var context = mem_canvas.getContext('2d');
context.fillStyle = "rgb(0,0,192)";
context.fillRect(0, 0, 64, 64);
}
function drawCanvas() {
var canvas = document.getElementById('SimpleCanvas');
if (!canvas || !canvas.getContext) {
return false;
}
var context = canvas.getContext('2d');
context.drawImage(mem_canvas,32,32);
}
</script>
</head>
<body onload="createCanvas();" style="background-color:#D0D0D0;">
<canvas id="SimpleCanvas" width="640" height="360" style="background-color:#FFFFFF;"></canvas>
<div>Canvas Demo</div>
<input type="button" value="Draw" onclick="drawCanvas();"/>
</body>
</html>
解説
bodyタグのonloadイベントにより、ページ表示時にcreateCanvas()関数が実行されます。createCanvas関数ではキャンバスオブジェクトを作成します。HTML Canvasの作成についての詳細は
こちらの記事を参照してください。
画面下部の[Draw]ボタンのクリックにより、drawCanvas()関数が実行されます。
function drawCanvas() {
var canvas = document.getElementById('SimpleCanvas');
if (!canvas || !canvas.getContext) {
return false;
}
var context = canvas.getContext('2d');
context.drawImage(mem_canvas,32,32);
}
drawCanvas関数では、HTMLファイル中に記述されているcanvasタグの"SimpleCanvas"オブジェクトをgetElementByIdメソッドで取得します。取得したオブジェクトのgetContext()メソッドを呼び出し、キャンバスのコンテキストを取得します。コンテキストのdrawImageメソッドを呼び出し、キャンバスへの描画をします。描画する内容を指定する第一引数にcreateCanvas関数で作成したキャンバスオブジェクトであるmem_canvasを与えます、第二、第三引数は描画するキャンバスの位置を指定します。今回のコードでは(x,y)=(32,32)の位置に描画します。
drawImageの詳細は画像をHTML Canvasに描画するコードを紹介している
こちらの記事も参照してください。
実行結果
上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。
画面下部の[Draw]ボタンをクリックします。もともと配置されていたHTML Canvasにメモリ上で作成されたHTML Canvasの描画内容を描画できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用