【问题标题】:Image and Canvas coordinate displacement when drawing绘图时Image和Canvas坐标位移
【发布时间】:2016-03-12 16:09:42
【问题描述】:

我在 FrameLayout 中的 SurfaceView 的画布上画线。我从相机预览中接收图像,对其进行处理,获取矩形的坐标并在画布上原始线条。绘制时,我在 y 轴上得到了这些线的位移,线越低,位移越大(见下图):

我用红线标记了(用Paint程序,不是实际的应用程序)下部线的坐标坐标在位图上的大致位置,以及矩形的下部绿线(由实际应用程序放置,绘制在画布上) 连同红线显示,有多少坐标被移位。顶部的坐标不能穿过屏幕,但在底部它们可以——如果矩形足够低,线条会出现在屏幕下方,但在顶部它们不会(它们不应该在所有 4 个边的任何一个上都这样做,因为给定的坐标永远不会超出位图)。

绘图函数如下所示:

public void DrawAllContours(List<Point[]> rectPoints, int ratio)
{
    paint.setColor(Color.GREEN);
    paint.setStrokeWidth(2.5f);

    canvas = sh.lockCanvas();
    canvas.drawColor(0, PorterDuff.Mode.CLEAR);

    for (int i = 0; i < rectPoints.size(); i++)
    {
        for (int j = 0; j < 4; j++)
            canvas.drawLine((float)rectPoints.get(i)[j].x*ratio, (float)rectPoints.get(i)[j].y*ratio,
                    (float)rectPoints.get(i)[(j+1)%4].x*ratio, (float)rectPoints.get(i)[(j+1)%4].y*ratio, paint);
    }

    sh.unlockCanvasAndPost(canvas);
}

ratio 变量是实际预览图像大小与处理大小调整后的位图之间的差异(通常值为 3)。 实际坐标应在预览位图上,而不是在画布上。

我怎样才能克服这个问题并将线条放在它们的确切位置?

提前谢谢你。

【问题讨论】:

    标签: java android image-processing canvas bitmap


    【解决方案1】:

    所以我发现,相机预览尺寸确实与画布尺寸不同。我的预览尺寸是 1920X1080,画布是 1845X1080 左右,这就是 Y 坐标偏移的原因。我刚刚找出了差异比率并分别按该比率画线。画布分辨率可以通过 Canvas.getWidth()、Canvas.getHeight() 找到。

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2023-04-06
      • 2021-11-11
      相关资源
      最近更新 更多