canvasでのピクセル操作について自分メモとか〜

とある作業でピクセル操作が必要になったので。
とりあえず自分用に図とベースとなるプログラムを。

2012-08-29 配色チェックツールとか〜 - w7工廠に下記コードを改良して使っています

<!DOCTYPE HTML>
<html>
	<head>
	<style>canvas{background-color:#ccc;}</style>
	<script>
	function main(){
		var image=new Image();
		image.src="1.png";
		image.onload=function(){
			var canvas=document.getElementsByTagName('canvas')[0];
			var ctx=canvas.getContext('2d');
			// 変換前
			var input_w=image.width;
			var input_h=image.height;
			canvas.width=input_w;
			canvas.height=input_h;
			ctx.drawImage(image,0,0);
			var input=ctx.getImageData(0,0,input_w,input_h);
			// 変換後
			var output_w=input_w;//in-outでサイズが同じ場合
			var output_h=input_h;
			var output=ctx.createImageData(output_w,output_h);
			//x方向y方向1ピクセルごとに処理,※変更後のx,yでループを回す)
			for(var output_y=0;output_y<output_h;output_y++){
				for(var output_x=0;output_x<output_w;output_x++){
					//in-outでサイズが同じ場合(拡縮などの場合はこの式がかわってくる)
					var input_x=output_x;
					var input_y=output_y;
					//座標に対する色情報の先頭(RGBAのRの位置)を取得
					var input_rgba=(input_y*input_w+input_x)*4;
					var output_rgba=(output_y*output_w+output_x)*4;
					//R→G→Bと3回処理
					for(var rgb=0;rgb<3;rgb++){
						var color=input.data[input_rgba+rgb];
                                        //--------------------------------------------------
						//rgbaに対しての処理をここに記述
						color=255-color;  //たとえば色反転
                                        //--------------------------------------------------
						output.data[output_rgba+rgb]=color;
					}
					//透明Aはそのまま(変化させたい場合は上のループのrgb<4にする)
					output.data[output_rgba+3]=input.data[input_rgba+3];
				}
			}
			//canvasクリア・変更後のサイズに設定
			ctx.clearRect(0,0,canvas.width,canvas.height);
			canvas.width=output_w;
			canvas.height=output_h;
			ctx.putImageData(output,0,0);
		}
	}
	</script>
	</head>
	<body onload="main()">
		<canvas></canvas>
	</body>
</html>