【发布时间】: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