2013-04-10 60 views
0

以下函数将通过设置位图上的像素来绘制正弦波。但你如何绘制更粗的线?而不诉诸于图形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); 
    } 
} 

enter image description here

+1

使用graphics.lineTo等(用您选择的宽度)将线绘制到Shape对象中。然后通过使用bitmapData.draw(形状)复制整个图形 – 2013-04-10 12:53:24

回答

2

试试这个 - 调整的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); 
} 

绘制图形的形状对象,而不是一个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); 

根据需要更换宽度和高度,它会绘制矩形而不是单个像素 - 给出更粗的线条,但不是很漂亮我想像

+0

感谢您对Graphics API的关注,但是我认为我想远离Graphics API,作为学习练习,并且还允许我移植代码更容易。 – davivid 2013-04-10 14:54:15

+0

编辑我的答案;) – 2013-04-10 16:05:10

0

如果你想要线条要粗一些,我会建议使用一个圆的BitmapData而不是使用setPixel,使用draw()。

当然,您需要根据圆的大小来抵消圆的绘制位置。 - width/2 and -height/2