【问题标题】:Bitmap graph drawing, how do you add thickness to a line?位图绘图,如何为线条添加粗细?
【发布时间】:2013-04-10 12:38:40
【问题描述】:

以下函数将通过设置位图上的像素来绘制正弦波。但是你怎么把线画得更粗呢?无需借助 Graphics API。

function drawWave(amp:int, freq:int):void
{
    for (var i:int = 0; i < stage.stageWidth; i++)
    {
        var ang:Number = 2 * Math.PI * freq * i/stage.stageWidth;
        bmd.setPixel(i, yaxis - amp * Math.sin(ang), 0xff0000);
    }
}

【问题讨论】:

  • 使用 graphics.lineTo 等将线条绘制到 Shape 对象中(宽度由您选择)。然后使用 bitmapData.draw(shape) 复制整个图形

标签: actionscript-3 math graphics graph bitmap


【解决方案1】:

试试这个 - 根据需要调整 lineWidth:

function drawWave(amp:int, freq:int):void
{
    var lineWidth:Number = 10;
    var shape:Shape = new Shape();
    var g:Graphics = shape.graphics;
    g.lineStyle(lineWidth, 0xFF0000);
    for (var i:int = 0; i < stage.stageWidth; i++)
    {
        var ang:Number = 2 * Math.PI * freq * i/stage.stageWidth;
        var ypos:Number = yaxis - amp * Math.sin(ang);
        if (i==0)
            g.moveTo(i, ypos);
        else
            g.lineTo(i, ypos);
    }
    bmd.draw(shape);
}

将图形绘制到 Shape 对象而不是 BitmapData - 因此您可以利用它提供的抗锯齿功能。然后将整个内容复制到 BitmapData。

有关调整线条外观的更多选项,请参阅 docs for lineStyle(..)

编辑:

如果你坚持只使用 BitmapData,你可以试试这个:

 bmd.drawRect(new Rectangle(i-WIDTH*0.5, yaxis-amp*Math.sin(ang)-HEIGHT*0.5, WIDTH, HEIGHT), 0xff0000);

根据需要替换 WIDTH 和 HEIGHT,它将绘制矩形而不是单个像素 - 给出更粗的线,但我想不是很漂亮

【讨论】:

  • 感谢有关 Graphics API 的提醒,但是我想我想远离 Graphics API,作为一个学习练习,也让我可以更轻松地移植代码。跨度>
【解决方案2】:

如果你想让线条更粗,我建议使用圆形的 BitmapData 而不是使用 setPixel,使用 draw()。

当然,您需要根据圆的大小偏移圆的绘制位置。 - width/2 和 -height/2

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2017-07-25
    • 2013-07-29
    • 2014-09-03
    • 2013-05-17
    相关资源
    最近更新 更多