画布绘制精度问题

时间:2012-06-21 21:33:34

标签: android android-canvas

有人帮我理解Android中疯狂的Canvas类。它似乎不准确,我不太清楚为什么参数是浮点值。例如,这是我想要绘制的多边形,具有绝对点值:

       mPaint.setStyle(Paint.Style.STROKE);
       mPaint.setColor(Color.RED);
       mPaint.setAntiAlias(false);
       mPaint.setDither(false);
       mPaint.setFilterBitmap(false);

       Path path1 = new Path();
       path1.moveTo(151, 100);
       path1.lineTo(200, 200);
       path1.lineTo(100, 151);
       path1.lineTo(200, 151);
       path1.lineTo(100, 201);
       path1.lineTo(151, 100);
       //   So that these points constitute a closed polygon  
       path1.setFillType(Path.FillType.EVEN_ODD);
       mPaint.setStyle(Paint.Style.FILL);
       mPaint.setColor(Color.GRAY);
       //   Draw the polygon  
       mCanvas.drawPath(path1, mPaint);

当我在Windows中使用Windows GDI运行类似的代码时,它确切地指出了这一点。然而,在android中,存在两个问题:

1)即使我关闭了抗锯齿,该线似乎也是消除锯齿的(灰线周围有黑色像素)。 2)它并不总是达到指定点。有时它确实如此,有时它不会

为了更接近我想要的点,我必须这样做:

       Path path1 = new Path();
       path1.moveTo(151, 100-1);
       path1.lineTo(200+1, 200+1);
       path1.lineTo(100-1, 151);
       path1.lineTo(200+2, 151);
       path1.lineTo(100, 201);
       path1.lineTo(151+1, 100);

我无法弄清楚这里的规则或它的做法是多么奇怪。

1 个答案:

答案 0 :(得分:1)

这就像Path类一样,你的意思是什么而不是Canvas。现在我建议您将抖动设置为true mPaint.setDither(true),允许我引用抖动方法:

  

setFlags()的辅助,设置或清除DITHER_FLAG位抖动会影响精确度低于器件的颜色的下采样方式。没有抖动通常更快,但是更高精度的颜色被截断(例如8888-> 565)。抖动尝试分发此过程中固有的错误,以减少视觉伪像。

换句话说,它告诉你解析颜色可能存在问题。 因此,这可能是导致问题的原因。