gpt4 book ai didi

Javascript imageData 返回 0 的数组

转载 作者:太空狗 更新时间:2023-10-29 15:55:30 25 4
gpt4 key购买 nike

我正在尝试操作 imageData,但在我加载图像并获取其像素数据后,我的 imageData 数组返回全 0。

有一些 html 元素,例如 slider 和文本框。请忽略那些。

有一个 ImageObject 数据结构,我在其中存储所有图像属性,如图像、像素数据等。

我首先加载图像,获取其像素数据,然后返回一个回调来存储 ImageObject.imageData。但是在日志中 ImageObject.data 返回全 0。

ImageObject = {};
var MainCtx;
var MainCanvas;
//get the image pixel properties

function start()
{
//load up the main canvas and ctx
MainCanvas = document.getElementById("canvas");
MainCtx = MainCanvas.getContext('2d');

//first load up the image and then get its pixel data
ImageObject.loadImage(function(imageData){
ImageObject.imageData = imageData;
ImageObject.data = ImageObject.imageData.data;

console.log(ImageObject.data); // -> data return all 0's in the array

for(var i = 0; i < ImageObject.data.length; i += 4) {
var brightness = 0.34 * ImageObject.data[i] + 0.5 * ImageObject.data[i + 1] + 0.16 * ImageObject.data[i + 2];
// red
ImageObject.data[i] = brightness;
// green
ImageObject.data[i + 1] = brightness;
// blue
ImageObject.data[i + 2] = brightness;
}

ImageObject.ctx.putImageData(ImageObject.imageData,ImageObject.image.width,ImageObject.image.height);
});
}

ImageObject.loadImage = function(callback)
{
ImageObject.image = new Image();
ImageObject.image.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
ImageObject.image.addEventListener('load',function()
{
MainCtx.drawImage(ImageObject.image,0,0);
callback(ImageObject.getImageData(ImageObject.image));
});
}

ImageObject.getImageData = function(img)
{
this.canvas = getCanvas(img.width,img.height);
this.ctx = this.canvas.getContext('2d');
return this.ctx.getImageData(0,0,this.canvas.width,this.canvas.height);
}

function getCanvas(w,h)
{
var c = document.createElement('canvas');
c.width = w;
c.height = h;
return c;
}

start();

我已经在下面分享了 jsFiddle 链接

jsFiddle

有人可以看看我做错了什么吗?

最佳答案

您的问题是您从在 getCanvas 函数中创建的新 Canvas 获取图像数据。您需要在现有 Canvas 上运行 getImageData

这是对 console.log

的更新
console.log(MainCtx.getImageData(0, 0, MainCanvas.width, MainCanvas.height));

这仍然不会立即生效,因为您要从不同的来源加载图像,因此请确保首先在本地托管图像。

关于Javascript imageData 返回 0 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com