getImageData 的加载事件
On Load event for getImageData
您好,我有这个脚本可以检查透明像素和非透明像素。现在我做到了,所以结果来自鼠标悬停在 100px x 100px 的矩形:
var data = ctx.getImageData(100,100, canvas.width, canvas.height).data;
此时鼠标悬停在不透明区域和透明区域的结果上。
我想以某种方式在负载上可视化这个矩形,网格覆盖图像和不透明的盒子,透明的盒子有不同的颜色,比如不透明的是绿色,透明的是红色。我可能需要加载功能?但它应该是什么样子呢?
我被困在这里,需要有人指引我到正确的位置
这是我目前的进度:
由于您可能希望游戏机仍然显示,因此您可以使用减少的 alpha (globalAlpha) 绘制 100x100 框。
这是示例代码和演示:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var boxWidth=100;
var boxHeight=100;
var boxRows=Math.ceil(865/boxHeight);
var boxCols=Math.ceil(1152/boxWidth);
var boxes=new Array(boxRows*boxCols);
for(var i=0;i<boxes.length;i++){boxes[i]=false;}
var img=new Image();
img.onload=start;
img.crossOrigin='anonymous';
img.src="http://i.imgur.com/RrHayx8.png?1";
function start(){
ctx.drawImage(img,0,0);
var d=ctx.getImageData(0,0,cw,ch).data;
for(var i=0;i<d.length;i+=4){
if(d[i+3]>200){
var px=parseInt(i/4);
var pixelY=parseInt(px/cw);
var pixelX=px-pixelY*cw;
var boxX=parseInt(pixelX/boxWidth);
var boxY=parseInt(pixelY/boxHeight);
boxes[boxY*boxCols+boxX]=true;
}
}
ctx.globalAlpha=0.25;
ctx.fillStyle='red';
for(var i=0;i<boxes.length;i++){
var y=parseInt(i/boxCols);
var x=i-y*boxCols;
if(boxes[i]==true){
ctx.fillRect(x*boxWidth,y*boxHeight,boxWidth,boxHeight);
}
}
ctx.globalAlpha=1.00;
ctx.fillStyle='black';
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=1152 height=865></canvas>
您好,我有这个脚本可以检查透明像素和非透明像素。现在我做到了,所以结果来自鼠标悬停在 100px x 100px 的矩形:
var data = ctx.getImageData(100,100, canvas.width, canvas.height).data;
此时鼠标悬停在不透明区域和透明区域的结果上。
我想以某种方式在负载上可视化这个矩形,网格覆盖图像和不透明的盒子,透明的盒子有不同的颜色,比如不透明的是绿色,透明的是红色。我可能需要加载功能?但它应该是什么样子呢?
我被困在这里,需要有人指引我到正确的位置
这是我目前的进度:
由于您可能希望游戏机仍然显示,因此您可以使用减少的 alpha (globalAlpha) 绘制 100x100 框。
这是示例代码和演示:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var boxWidth=100;
var boxHeight=100;
var boxRows=Math.ceil(865/boxHeight);
var boxCols=Math.ceil(1152/boxWidth);
var boxes=new Array(boxRows*boxCols);
for(var i=0;i<boxes.length;i++){boxes[i]=false;}
var img=new Image();
img.onload=start;
img.crossOrigin='anonymous';
img.src="http://i.imgur.com/RrHayx8.png?1";
function start(){
ctx.drawImage(img,0,0);
var d=ctx.getImageData(0,0,cw,ch).data;
for(var i=0;i<d.length;i+=4){
if(d[i+3]>200){
var px=parseInt(i/4);
var pixelY=parseInt(px/cw);
var pixelX=px-pixelY*cw;
var boxX=parseInt(pixelX/boxWidth);
var boxY=parseInt(pixelY/boxHeight);
boxes[boxY*boxCols+boxX]=true;
}
}
ctx.globalAlpha=0.25;
ctx.fillStyle='red';
for(var i=0;i<boxes.length;i++){
var y=parseInt(i/boxCols);
var x=i-y*boxCols;
if(boxes[i]==true){
ctx.fillRect(x*boxWidth,y*boxHeight,boxWidth,boxHeight);
}
}
ctx.globalAlpha=1.00;
ctx.fillStyle='black';
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=1152 height=865></canvas>