无法在画布上画一条线

时间:2015-11-08 22:14:04

标签: javascript html5 canvas pixel-manipulation

我在使用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 )
}

你可以在this小提琴中看到它。顺便说一句,我的数学给了我第二个for循环画线: 我想为整个第245行着色。因此,为了传递前244行,我将2000(每行中的数据点数)乘以244行得到488000.然后我循环遍历循环500次以命中行中的每个像素,并添加488000到达正确的一排。我真的很感激第245行没有变黑的解释/修复。

1 个答案:

答案 0 :(得分:3)

您没有设置画布大小。

请注意,CSS大小仅与显示有关,而不是画布中的像素数。

您需要设置实际画布大小,例如:

 cnvs.width = 500;
 cnvs.height = 500;

请记住,当您设置height / width时,画布被清除(即使该值与当前大小相同),还要记住要获得像素完美的图形,您需要保持画布大小与页面上的元素大小相同(即cnvs.offsetWidthcnvs.offsetHeight)。