我正在处理复杂的任务,所以我的问题不应该真正有意义,但问题是如何使用putImageData
绘制一个点,其中包含以前通过getImageData
获得的某些点的颜色信息。
假设我有200px水平线 A(0,0) - B(199,0)。我可以使用
读取其像素颜色信息var pixels = ctx.getImageData(0, 0, 200, 1); // horizontal line :: 200 pixels
但是一旦我有pixels
数组(pixel.length = 800),我想在不同的地方从这一行画出一些点。只是指出,而不是线。
这将绘制整行:
ctx.putImageData(pixels, 20, 20);
但是如何用第n 点的像素颜色信息绘制一个点 C(20,20) A - B ?
如何使用putImageData
中的数据将pixels
与rgba (array.lenght = 4)数组一起使用?
答案 0 :(得分:1)
putImageData
有另一组参数,一个脏矩形:
putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)
使用此功能,您可以在图像数据中指定要复制的矩形。它只会将该矩形中的像素复制回画布。
所以这会让你的水平线,如你所说:
var pixels = ctx.getImageData(0, 0, 200, 1); // horizontal line :: 200 pixels
这会将(20,0)
中的一个像素放在画布中位置(20,0)
的图像数据中:
ctx.putImageData(pixels, 0, 0, 20, 0, 1, 1)
请注意,您仍然必须在0,0处开始x / y偏移,这是因为脏矩形的工作原理。你不是将(20,0)的一个像素放回(0,0),而是将整个图像数据从(0,0)开始放回,但不要复制任何一个像素,除了里面的内容。脏矩形。这使得