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

时间:2016-02-11 04:15:04

标签: android canvas bitmap drawing custom-draw

我的应用程序有一项功能,让用户可以拍摄照片并在该照片上添加绘图。

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

但在绘制具有720 x 480(高x宽)的设备时。如果我创建900 x 900透明图片并从0,0900,900绘制一条线,则画布仅从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 ??有什么工作吗?任何帮助都非常感谢: - )

2 个答案:

答案 0 :(得分:1)

关于canvas的更多阅读以及来自this帖子的帮助后,我能够解决问题。

问题发生在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);

}

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

答案 1 :(得分:0)

仅仅因为照片是900x900,这并不意味着它在设备屏幕上显示时正好是那么多像素。设备屏幕可以具有非常不同的大小,并且当图像(或任何视图)被告知扩展其适合屏幕,或以dp(设备无关像素)测量时,实际设备像素数量因设备屏幕而异。

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