首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getImageData的负载事件

getImageData的负载事件
EN

Stack Overflow用户
提问于 2015-03-26 19:44:25
回答 1查看 379关注 0票数 3

你好,我有这个脚本,检查透明像素和非透明像素。现在我做了,所以结果是来自100 it×100 it矩形在鼠标上方:

代码语言:javascript
复制
var data = ctx.getImageData(100,100, canvas.width, canvas.height).data;

并且现在它显示在鼠标上方的Opague区和透明区。

我想要以某种方式想象这个矩形在负载与网格覆盖的图像和透明的盒子和透明的一个有不同的颜色,如绿色,透明的是红色。我可能需要负荷功能?但它应该是什么样子呢?

我被困在这里,需要有人指点我的位置。

以下是我目前的进展:

https://jsfiddle.net/kdichev/Lnp3k5re/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 20:39:46

由于您可能希望游戏控制台仍然显示,您可以绘制您的100 x100盒与减少阿尔法(globalAlpha)。

下面是示例代码和演示:

代码语言:javascript
复制
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';

}
代码语言:javascript
复制
body{ background-color: ivory; }
#canvas{border:1px solid red;}
代码语言:javascript
复制
<canvas id="canvas" width=1152 height=865></canvas>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29287481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档