【问题标题】:Android Canvas not drawing more than screen dimensionsAndroid Canvas 不绘制超过屏幕尺寸
【发布时间】:2016-05-21 17:14:56
【问题描述】:

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

所有照片的大小都被重新调整为 900 x 900。 允许用户向图像添加绘图。我在original image 上保留transparent 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??有什么解决办法吗?非常感谢任何帮助:-)

【问题讨论】:

    标签: android canvas bitmap drawing custom-draw


    【解决方案1】:

    仅仅因为一张照片是 900x900,这并不意味着它在设备屏幕上显示时就是这么多像素。设备屏幕可以有非常不同的尺寸,当图像(或任何视图)被告知扩展其大小以适应屏幕,或以 dp(设备独立像素)测量时,实际设备像素数会因设备屏幕而异。

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

    【讨论】:

    • 谢谢,但添加的代码仅用于测试目的。
    • 我不知道这意味着什么。我从一般意义上解释了为什么你的线条没有按预期的大小绘制。请努力了解 Android 设备具有不同大小的像素意味着什么。
    【解决方案2】:

    在阅读了更多关于 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);
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多