Android Canvas 绘制的不超过屏幕尺寸



我的应用程序具有一项功能,允许用户捕获照片并在该照片上添加绘图。

所有照片的大小都重新调整为900 x 900。允许用户向图像添加绘图。我在original image上保持transparent image,并在透明图像上绘制。绘图是使用 canvas 完成的。

但是在具有720 x 480(高 x 宽)的设备中绘制时。如果我创建一个900 x 900透明的图像并画一条从0,0900,900的线,canvas 只画一条从0,0480,480的线。

以下是代码的相应部分:

准备画布:

holder = getHolder();
if (holder.getSurface().isValid()) {
    Canvas canvas = holder.lockCanvas();
    canvas.drawColor(Color.TRANSPARENT,  PorterDuff.Mode.CLEAR);
    /* original image is 900 x 900 */
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());
    canvas.setBitmap(overlayBitmap);
}

画线:

canvas.drawLine(0, 0, 900, 900, paint);

我不知道为什么我会遇到这个问题。这是因为使用canvas??有什么解决方法吗?任何帮助都非常感谢:-)

在阅读了更多有关canvas的内容以及这篇文章的帮助后,我能够解决问题。

问题出在canvas clip rectangle.默认情况下它是(0,0,480,480)的,因为设备显示720 x 480我猜?因此,位图上的任何内容总是被裁剪为480 x 480

后来我像这样修改了我的代码:

holder = getHolder();
if (holder.getSurface().isValid()) {
    Canvas canvas = holder.lockCanvas();
    canvas.drawColor(Color.TRANSPARENT,  PorterDuff.Mode.CLEAR);
    /* original image is 900 x 900 */
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());
    canvas.setBitmap(overlayBitmap);
    /* set extended clip rectangle for the larger target bitmap */
    Rect clipRect = canvas.getClipBounds();
    clipRect.set(0, 0, image.getWidth(), image.getHeight());
    canvas.clipRect(clipRect, Region.Op.REPLACE);
}

图像大小替换剪辑矩形大小后,一切正常。

仅仅因为照片是 900x900,这并不意味着它在设备屏幕上显示时正是那么多像素。 设备屏幕可以具有非常不同的大小,当图像(或与此相关的任何视图)被告知展开其以适应屏幕时,或者以 dp(设备独立像素)为单位测量,设备像素的实际数量将根据设备屏幕而有所不同。

您的代码需要对这些差异敏感。 绘制时,不要假定视图的画布大小。相反,询问视图它有多大,并根据实际测量的大小执行所有绘图。

相关内容

  • 没有找到相关文章

最新更新