如何使用Canvas的putImageData绘制一个点?

时间:2012-07-06 17:10:22

标签: javascript html5 graphics canvas

我正在处理复杂的任务,所以我的问题不应该真正有意义,但问题是如何使用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)数组一起使用?

1 个答案:

答案 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)开始放回,但不要复制任何一个像素,除了里面的内容。脏矩形。这使得