わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

画像の描画(拡大/縮小)

HTML5のキャンバスを使って画像の描画(拡大/縮小)を行います。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<title>画像の描画(拡大/縮小)</title>
<script type="text/javascript">
	/*
		ページロード完了
	*/
	function OnLoad() {

		// 画像
		var img01 = null;
		var img02 = null;

		// キャンバス取得
		var canvas = document.getElementById("canvas");

		// イメージ番号
		var imgNum = 0;


		/*
			画像の描画
		*/
		function DrawImage( posX, posY ) {

			// 拡大率
			var zoom = 1 + Math.random() * 2;

			/*
				番号から画像上の位置を取得
			*/
			var imgX = parseInt( imgNum % 10 ) * 16;
			var imgY = parseInt( imgNum / 10 ) * 16 + 16;
			var imgW = 16;
			var imgH = 16;
			var img = img01;

			// 0番の時はハムスターを描画
			if (0 == imgNum) {
				imgX = 0;
				imgY = 0;
				imgW = img02.width;
				imgH = img02.height;
				img  = img02;
			}

			// 画像の描画サイズと位置
			var imgDrawW = imgW * zoom;
			var imgDrawH = imgH * zoom;
			var imgPosX = posX - imgDrawW / 2;
			var imgPosY = posY - imgDrawH / 2;

			// イメージの描画
			ctx.drawImage(
				img
			  , imgX		// 画像上の描画開始位置X
			  , imgY		// 画像上の描画開始位置Y
			  , imgW		// 描画する画像の幅
			  , imgH		// 描画する画像の高さ
			  , imgPosX		// 描画位置X
			  , imgPosY		// 描画位置Y
			  , imgDrawW	// 描画幅
			  , imgDrawH	// 描画高さ
			);
		}


		/*
			初期化
		*/
		function OnInit() {

			// マウスイベントを受け取る
			canvas.addEventListener(
				  "mousedown"
				, function (e) {

					/*
						タップ位置の取得
							FireFoxの場合は、offsetXとoffsetYがundefinedになる
					*/
					var posX = (e.offsetX !== undefined) ? e.offsetX : (e.layerX - e.target.offsetLeft);
					var posY = (e.offsetY !== undefined) ? e.offsetY : (e.layerY - e.target.offsetTop);

					// 画像の描画
					DrawImage( posX, posY );

					// 画像番号の更新
					imgNum++;
					if (imgNum >= 30) {
						imgNum = 0;
					}
				});
		}


		// コンテキストの取得
		var ctx = canvas.getContext('2d');

		// キャンバスのクリア
		ctx.fillStyle = 'white';
		ctx.fillRect( 0, 0, canvas.width, canvas.height );


		/*
			イメージの読み込み
		*/
		{
			// 1枚目の読み込み
			img01 = new Image();
			img01.onload = function () {

				// 2枚目の読み込み
				img02 = new Image();
				img02.onload = function () {

					// 初期化
					OnInit();
				};
				img02.src = "./img/hidekiti.png";
			};
			img01.src = "./img/icon.png";
		}
   }
</script>
</head>
<body bgcolor="#c0c0ff" onload="OnLoad()">
<h1>画像の描画(拡大/縮小)</h1>
<canvas width="300" height="240" id="canvas"></canvas>
<br />
タップした位置の画像を色々な大きさで描画します。
<br />
<a href="../html5_list.html">戻る</a>
</body>
</html>






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。