javascript - 使用 putImageData 时我没有正确使用循环

标签 javascript canvas putimagedata

我正在从文件中读取 RGB 值并尝试将它们放在 Canvas 上。

enter image description here

我尝试了许多不同的循环和增量值变体。

JavaScript:

function parseData(data) {
   var pixel_array = data.split('|');
   // Loop through pixel data from file
   for (i = 0; i < pixel_array.length; i += 4) {
         var [r, g, b] = pixel_array[i].split(',');
         imgData.data[i + 0] = r;
         imgData.data[i + 1] = g;
         imgData.data[i + 2] = b;
         imgData.data[i + 3] = 255;
   }
   ctx.putImageData(imgData, 0, 0);
};

数据格式示例:

var data='84,133,165|84,133,165|85,133,165|86,135,167|87,136,168|88,137,169|89,138|'

我正在将 RGB 值发送到 Canvas ,但它是我想要的大小的 1/4。我想要变量中 RGB 值的精确副本。

最佳答案

因为 Pixel_array.length 是数据中的像素数,所以您只需对其进行迭代。

但是由于 ImageData.data 使用 4 个槽来表示一个像素,因此您需要将您的 i 变量乘以 4。

var data='84,133,165|84,133,165|85,133,165|86,135,167|87,136,168|88,137,169|89,138|';
var pixel_array = data.split('|');
console.log(pixel_array.length); // 8

var imgData = new ImageData(4, 2);
console.log(imgData.data.length); // 32

// Loop through pixel data from file
for (let i = 0; i < pixel_array.length; i++) {
  const [r, g, b] = pixel_array[i].split(',');
  imgData.data[(i * 4) + 0] = r;
  imgData.data[(i * 4) + 1] = g;
  imgData.data[(i * 4) + 2] = b;
  imgData.data[(i * 4) + 3] = 255;
}
const ctx = canvas.getContext('2d');
ctx.putImageData(imgData, 0, 0);
// zoom for demo
ctx.imageSmoothingEnabled = false;
ctx.globalCompositeOperation = 'copy';
ctx.drawImage(canvas,10,10,10*canvas.width,10*canvas.height);
<canvas id="canvas"></canvas>

关于javascript - 使用 putImageData 时我没有正确使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55664711/

相关文章:

javascript - 如何将 PHP 结果创建的字符串提供给我的 javascript

javascript - 圆线段碰撞

javascript - 如何更改原点位置以在 HTML5 Canvas 中旋转绘制的线条

javascript - xmlDoc.getElementsByTagName ("tiles").hasChildNodes 不是一个函数?

canvas - 重用 HTML5 Canvas 绘制内容的最有效方式

angular - 使用 ctx.putImageData 更改图像大小

javascript - 尝试在没有 get/putImageData 的情况下操作 Canvas 上的 alpha?

Javascript iCal 解析器脚本忽略时区

javascript - HTML5 Canvas - 在更新循环中绘制图像

javascript - 是什么导致 TypeError : Expected `input` to be a `Function` or `Object` issue with gtoken and pify?