gpt4 book ai didi

javascript - HTML5 canvas putImageData 似乎弄乱了未获得预期结果的像素

转载 作者:行者123 更新时间:2023-11-29 20:15:38 25 4
gpt4 key购买 nike

我正在尝试使用一些自定义代码绘制一个等距正方形来构建像素数据,然后使用 putImageData 将其放在 Canvas 上。

但我没有得到预期的结果,在快速浏览 Canvas 的原始像素数据后,我发现我建立的所有像素数据似乎都被弄乱了。

我想要从下面的代码中得到的是黑色背景上的红色钻石。我哪里错了?

var Drawing = {};

Drawing.DrawIsoMetricSquare = function(cRenderContext, x, y, iWidth, cColor) {
var iHeight = iWidth / 2;

var iYPos = Math.floor(iHeight / 2) + 1;
var iXPos = 0;

var iRenderGirth = 1;

cPixelData = cRenderContext.createImageData(iWidth, iHeight);

var bExpand = true;

while (iXPos != iWidth) {
var iCurrentRenderGirth = 0;

while (iCurrentRenderGirth != iRenderGirth) {
var iY = iYPos + iCurrentRenderGirth;
//Draw first pixel then second
Drawing.ColorPixelAtPos(cPixelData.data, iXPos, iY, iWidth, cColor);
Drawing.ColorPixelAtPos(cPixelData.data, iXPos + 1, iY, iWidth, cColor);

iCurrentRenderGirth++;
}

//Move to next Render Start
iYPos = bExpand ? (iYPos - 1) : (iYPos + 1);
iXPos += 2;
iRenderGirth = bExpand ? (iRenderGirth + 2) : (iRenderGirth - 2);

bExpand &= iRenderGirth < iHeight;
}

cRenderContext.putImageData(cPixelData, x, y);
};

Drawing.XYPosToPixelPos = function(x, y, iWidth) {
return (x + y * iWidth) * 4;
};

Drawing.ColorPixelAtPos = function(cPixelData, x, y, iWidth, cColor) {
var iPixPos = Drawing.XYPosToPixelPos(x, y, iWidth);

cPixelData[iPixPos++] = cColor.r;
cPixelData[iPixPos++] = cColor.g;
cPixelData[iPixPos++] = cColor.b;
cPixelData[iPixPos] = 1; //Fixed alpha for now
};

var eCanvas = $("<canvas></canvas>");
eCanvas[0].width = 50;
eCanvas[0].height = 50;

$("#render").append(eCanvas);

var cRenderContext = eCanvas[0].getContext('2d');
cRenderContext.fillStyle = "rgba(1, 1, 1, 1)";
cRenderContext.fillRect(0, 0, 50, 50);

Drawing.DrawIsoMetricSquare(cRenderContext, 0, 0, 42, {
r: 255,
g: 0,
b: 0
});

JSFiddle 示例 here

最佳答案

问题是

  • 一个你已经改正的数学错误。
  • RGBA 说明符从 0..255 而不是 0..1
  • 您需要使用黑色不透明像素(默认情况下为白色)填充像素数据。

我添加了几行代码并为您制作了一个新的 fiddle 。

http://jsfiddle.net/bsssq/1/

现在您应该看到黑色方 block 上的红色菱形。

关于javascript - HTML5 canvas putImageData 似乎弄乱了未获得预期结果的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041729/

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