我在使用JavaScript在HTML画布上划线时遇到问题。为了记录在案,我不想使用任何预先写好的线条绘制方法,我需要使用像素操作。我试着在500x500像素的画布上画一条线,我已经用这个给出了数据
function drawBackgtoundAndLine()
{
var cnvs = document.getElementById("cnvs");
var cont = cnvs.getContext("2d")
var imdt = cont.getImageData(0,0,500,500)
//Fill canvas with a color
for ( var i = 0 ; i < imdt.data.length ; i = i + 4)
{
imdt.data[i] = 200;
imdt.data[i+1] = 100;
imdt.data[i+2] = 0;
imdt.data[i+3] = 255;
}
//Draw a horizontal line
var index = 0;
for ( var c = 0 ; c < 500 ; c++)
{
index = (4*c)+488000;
imdt.data[index] = 0;
imdt.data[index+1] = 0;
imdt.data[index+2] = 0;
imdt.data[index+3] = 255;
}
cont.putImageData( imdt , 0 , 0 )
}
你可以在这把小提琴上看到它的演奏。顺便说一句,我的数学给了我第二个循环来画一条线的机会,它是:我想把第245排全部涂上颜色。因此,为了遍历前244行,我将2000(每行中的数据点数量)乘以244行,得到488000。然后,我循环循环500次,以达到行中的每个像素,并将488000添加到右侧行。如果第245排没有变黑,我将非常感谢您的解释/修复。
您没有设置画布大小。
请注意,CSS大小仅与显示有关,而与画布中的像素数无关。
您需要设置实际画布大小,例如:
cnvs.width = 500;
cnvs.height = 500;
请记住,当您设置height
/width
时,画布将被清除(即使该值与当前大小相同),还请记住,要获得像素完美的图形,您需要保持画布大小与页面上的元素(即cnvs.offsetWidth
和cnvs.offsetHeight
)的大小相同。