ここは、ふぇりあ16歳が不定期に連載しているオンライン小説のページです。
VNIふぇりあ16歳へ
ゼロからわかる現代JavaScript
39.ドット絵の描画。「canvas」
*最新のIE9が必要です。
今度は色(RGB)データから
ドット絵を描画してみます。
まず
・createImageData
createImageDataメソッドでimageDataオブジェクトを作ります。
引数は画像の(縦幅, 横幅)となります。
今回使用するソースコード |
//配列の作成 var R = new Array(); var Y = new Array(); //配列に色(RGB)データを入力 R = [255, 0, 0, 255]; Y = [255, 255, 204, 255]; //ドット絵の大きさ var W = 16; var H = 16; function main() { //キャンバス要素の作成 var canvas = document.createElement("canvas"); //bodyに要素の追加 document.body.appendChild(canvas); //コンテキストを取得 2dは2D描画の意味 var ctx = canvas.getContext("2d"); // ImageDataオブジェクトを作成 var imgData = ctx.createImageData(W, H); //データ用の配列を作成 var data = new Array(); //16×16のデータを配列の連結で作る data = data.concat(R, R, R, R, R, R, R, Y, Y, R, R, R, R, R, R, R, R, R, R, R, R, R, R, Y, Y, R, R, R, R, R, R, R, R, R, R, R, R, R, Y, Y, Y, Y, R, R, R, R, R, R, R, R, R, R, R, R, Y, Y, Y, Y, R, R, R, R, R, R, R, R, R, R, R, R, Y, Y, Y, Y, R, R, R, R, R, R, R, R, R, R, R, Y, Y, Y, Y, Y, Y, R, R, R, R, R, R, R, R, R, Y, Y, Y, Y, Y, Y, Y, Y, R, R, R, R, R, R, R, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, R, R, R, R, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, R, R, Y, Y, Y, R, Y, Y, Y, Y, Y, Y, R, Y, Y, Y, R, R, Y, Y, R, R, R, Y, Y, Y, Y, R, R, R, Y, Y, R, R, Y, Y, Y, R, Y, Y, Y, Y, Y, Y, R, Y, Y, Y, R, R, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, Y, R, R, Y, Y, Y, Y, Y, R, Y, Y, R, Y, Y, Y, Y, Y, R, R, R, Y, Y, Y, Y, R, R, R, R, Y, Y, Y, Y, Y, R, R, R, R, R, R, Y, Y, Y, Y, Y, Y, R, R, R, R, R); //イメージデータにRGBの値を入れる for (i = 0; i < 4 * W * H; i++) { imgData.data[i] = data[i]; } //イメージデータを出力 ctx.putImageData(imgData, 0, 0); } |
次にデータ用の配列を作成し、画像の大きさに応じて
配列で指定されたカラーデータをいれます。
・concat
このとき配列の連結をconcatメソッドで行っています。
そのため、一時配列に配列のカラーデータがすべて格納されます。
そしてimgDataオブジェクト(一時配列)にdataメソッドを使って
カラーデータの数(4) × 横幅 × 縦幅
分のデータをいれます。
そして
・putImageData
putImageDataメソッドでイメージを出力します。
引数は(imageDataオブジェクト, X座標, Y座標)となります。
実行結果
コラム:
ドット絵は、スライムとかホリンらしきもの?です。
この方法は入門者にはかなり難しいかもしれません。
分からなくても大丈夫だと思います。
(C)著作権はふぇりあ16歳とお兄ちゃんにあります。
無断転載、盗用は禁止です。