【问题标题】:Why is drawLine offset by 1 pixel?为什么drawLine偏移1个像素?
【发布时间】: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


【解决方案1】:

我会回答的。我只好放弃这个,写了一个 Bresenham 算法,一个一个地设置像素。这适用于我正在做的事情。我怀疑在从左到右、从下到上绘制线条时存在 drawLine 错误。

【讨论】:

    猜你喜欢
    • 2021-02-12
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多