2013-02-02 45 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