【发布时间】:2012-06-06 23:02:17
【问题描述】:
这对于 Android 专家来说可能很容易。我正在尝试通过画布绘制位图。我想要精确的颜色,没有抗锯齿,并且线条位于位图中的精确绝对坐标处。有时线条在正确的位置,有时它们偏移 1 个像素。我觉得这与缩放有关。但我不确定。代码如下:
Paint mPaint = new Paint();
mPaint.setColor(Paint.WHITE);
mPaint.setStrokeWidth(0);
mPaint.setAntiAlias(false);
mPaint.setDither(false);
mPaint.setStyle(Paint.Style.STROKE);
drawingContext.mycanvas.drawLine(20, 0, 10, 10, mPaint);
这实际上画了一条从 (19,0) 到 (10,9) 的线。为什么?
【问题讨论】:
-
我相信画线笔画使得笔画线被定义的线分割。这意味着,如果您绘制一条坐标为 2,2 x 10,2 且笔划宽度为 2 的线,您最终会得到一个 1,2,10,3(左、上、右下)的矩形。如果 strokewidth 设置为 1,我不确定这种“框架”是如何工作的,但这种事情可能是导致错误的原因。
-
这可能是出于同样的原因,即 OpenGL 坐标空间与任何正常坐标空间相比通常是倒置的;图形程序员都只是有点疯狂。也就是说,ab11的解释大概是对的。
-
我首先关心的是 drawLine() 采用浮点参数。这是出乎意料的,但我认为这与 Android 在任何屏幕上运行的使命有关。那么解决方法是什么??我需要打开显示器上的特定像素(这是一个嵌入式系统,而不是手机,所以我不关心缩放)。
-
我只好放弃这个,写了一个 Bresenham 算法,逐个设置像素。这适用于我正在做的事情。我怀疑在从左到右、从下到上绘制线条时存在 drawLine 错误。
标签: android canvas bitmap paint