2013-02-02 28 views
0

我正在制作一个绘图应用程序,用户可以选择从图库中加载图片并进一步绘制。但是,如果照片的尺寸大于屏幕,则只能显示部分图片。android将图片加载到最大允许尺寸

public void load_pic(String picturePath) // load a picture from gallery 
    { 
     bitmap = (BitmapFactory.decodeFile(picturePath)).copy(Bitmap.Config.ARGB_8888, true); 
     bitmapCanvas = new Canvas(bitmap); 
     invalidate(); 
    } 

我怎么能编码,使得图像既可以

  1. 载荷,使得能够以这样适合任一maximium容许屏幕宽度或高度,或者
  2. 负载,可以在图像拉至占据全屏

另外,在某些设备上运行它会发出java.lang.OutOfMemoryError ...并且它崩溃了......怎么可能解决?

非常感谢提前!

+0

参考这个http://stackoverflow.com/a/14117007/1935890 –

回答

0

首先,您需要找到您可以使用下面的代码完成的屏幕宽度和高度。

Display display = getWindowManager().getDefaultDisplay(); 
int newWidth = display.getWidth(); 
int newHeight = display.getHeight(); 

如果您不是在活动中,你可以得到显示如下描述,

WindowManager wm = (WindowManager) mContex.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

您可以使用下面的代码缩放位图。

Bitmap scaled = Bitmap.createScaledBitmap(oldBitmap, newWidth, newHeight, true); 

也可以使用设置高度和宽度在解码的时候, outWidthBitmapFactory.Options的outHeight属性。

而要克服outOfMemoryError您可以参考answer指出的评论。

P.S.我写了这个链接的答案。

希望这会帮助你。

+0

感谢您的意见!但面板强调getWindowManager()表示方法getWindowManager()未定义... =( – pearmak

+0

如果您不在活动中,您需要传递上下文以访问该方法请参阅更新后的答案 –

+0

谢谢!但我已经改为位图= Bitmap.createScaledBitmap(位图,newWidth,newHeight,true); – pearmak