2016-02-11 62 views
1

我的应用程序有一个功能,让用户捕捉照片并在该照片上添加绘图。Android画布没有绘制超过屏幕尺寸

所有照片的尺寸都精确到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); 
} 

图Line:

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

我为什么我有这个不知道问题。这是因为使用canvas ??有什么解决办法吗?任何帮助,高度赞赏:-)

回答

0

一些更多的阅读经过约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); 

} 

图像尺寸替换剪裁矩形大小一切工作就好了。

0

只是因为照片是900x900,这并不意味着它是这些人恰恰是许多像素在设备屏幕上显示时。设备屏幕可具有非常不同的尺寸,并且当图像(或就此而言的任何视图)被告知要扩大与以适应屏幕,或在DP测量(设备无关的像素),设备的像素的实际数量将根据设备屏幕而异。

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

+0

感谢但添加的代码仅用于测试目的。 –

+0

我不知道这意味着什么。我在一般意义上解释了为什么你的线条没有按预期的尺寸绘画。请作出努力,明白它的意思为Android设备有不同大小的像素。 –