当前位置:  开发笔记 > 编程语言 > 正文

来自HTML Canvas的getPixel?

如何解决《来自HTMLCanvas的getPixel?》经验,为你挑选了6个好方法。

是否可以查询HTML Canvas对象以获取特定位置的颜色?



1> Georg Schöll..:

W3C文档中有关于像素操作的部分.

这是一个如何反转图像的示例:

var context = document.getElementById('myCanvas').getContext('2d');

// Get the CanvasPixelArray from the given coordinates and dimensions.
var imgd = context.getImageData(x, y, width, height);
var pix = imgd.data;

// Loop over each pixel and invert the color.
for (var i = 0, n = pix.length; i < n; i += 4) {
    pix[i  ] = 255 - pix[i  ]; // red
    pix[i+1] = 255 - pix[i+1]; // green
    pix[i+2] = 255 - pix[i+2]; // blue
    // i+3 is alpha (the fourth element)
}

// Draw the ImageData at the given (x,y) coordinates.
context.putImageData(imgd, x, y);



2> Theo.T..:

你试过getImageData方法吗?

var data = context.getImageData(x, y, 1, 1).data;
var rgb = [ data[0], data[1], data[2] ];


这很聪明,但是如果你要调用getPixel很多,那么为整个图像(0,0,宽度,高度)缓存ImageData对象要快得多*,然后使用`idx计算索引=(y*width + x)*4`就像Georg的回答一样.但是,每次图像更改时都不要忘记刷新缓存的对象.
不应该是context.getImageData()而不是canvas.getImageData()?
@Crashalot取决于var"canvas"包含的内容,它可能只是具有蹩脚var名称的画布的上下文.
什么是`Color()`构造函数?这似乎不存在于任何地方

3> Qwerty..:

是的,只要你有它的背景.如何获取画布上下文?

var imgData = context.getImageData(0,0,canvas.width,canvas.height);
// { data: [r,g,b,a,r,g,b,a,r,g,..], ... }

function getPixel(imgData, index) {
  var i = index*4, d = imgData.data;
  return [d[i],d[i+1],d[i+2],d[i+3]] // returns array [R,G,B,A]
}

// AND/OR

function getPixelXY(imgData, x, y) {
  return getPixel(imgData, y*imgData.width+x);
}



4> Annika Backs..:

是的,请查看getImageData().以下是使用canvas破解验证码的示例:

http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/



5> 小智..:
function GetPixel(x, y)
{
    var p = ctx.getImageData(x, y, 1, 1).data; 
    var hex = "#" + ("000000" + rgbToHex(p[0], p[1], p[2])).slice(-6);  
    return hex;
}

function rgbToHex(r, g, b) {
    if (r > 255 || g > 255 || b > 255)
        throw "Invalid color component";
    return ((r << 16) | (g << 8) | b).toString(16);
}


但是,应将ctx设置为GetPixel中的属性

6> Don Park..:

请注意,getImageData返回一个快照.意义是:

更改将在后续的putImageData中生效

getImageData和putImageData调用相对较慢

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有