日期:2014-05-17 浏览次数:21004 次
创建前台画布:
var canvas = document.getElementById("_canvasView");
var context = canvas.getContext("2d");
创建后台画布:
var backend = document.createElement("canvas");
backend.width = canvas.width;
backend.height = canvas.height;
var backendContext = backend.getContext("2d");
// 后台画布涂上黑色(我相信anti-aliasing不会把它搞成灰色)
backendContext.fillStyle = "#000000";
backendContext.fillRect(0, 0, backend.width, backend.height);
// 获取后台画布对应的像素数组
var imageObj = backendContext.getImageData( 0, 0, canvas.width, canvas.height);
var imageData = imageObj.data;
如果你想给这个数组里的像素赋予颜色值,可以像下面的代码:
function setPixel(imageData, width, height, x, y, red, green, blue)
{
// i 没做边界条件检查,留给读者自己完成。
var i = (y*width+x)*4;
imageData = red;
imageData[i+1] = green;
imageData[i+2] = blue;
// 下面这个是Alpha,我们不用
//DEL: imageData[i+3]=???;
}view plainprint?
function setPixel(imageData, W, H, x, y, r, g, b)
{
var i = (y*W+x)*4;
imageData = r;
imageData[i+1] = g;
imageData[i+2] = b;
}
/**
* Bresenham's draw line algorithm
*/
function Bresenham_drawLine(imageData, width, height, x1, y1, x2, y2, r, g, b)
{
var dx = Math.abs(x2 - x1),
dy = Math.abs(y2 - y1),
yy = 0,
t;
if (dx < dy) {
yy = 1;
t=x1; x1=y1; y1=t;
t=x2; x2=y2; y2=t;
t=dx; dx=dy; dy=t;
}
var ix = (x2 - x1) > 0 ? 1 : -1,
iy = (y2 - y1) > 0 ? 1 : -1,
cx = x1,
cy = y1,
n2dy = dy * 2,
n2dydx = (dy - dx) * 2,
d = dy * 2 - dx;
if(yy==1) {
while(cx != x2) {
if(d < 0) {
d += n2dy;
}
else {
cy += iy;
d += n2dydx;
}
setPixel(imageData, width, height, cy, cx, r, g, b);
cx += ix;
}