我試圖做一個基本的應用程序,顯示從相機的圖像,但我當我嘗試從BitmapFactory.decodeFile
從SD卡加載.jpg,它返回null。將大圖片加載到位圖中?
它不會給我一個內存不足的錯誤,我覺得很奇怪,但完全相同的代碼可以在較小的圖像上正常工作。
通用圖庫如何從相機顯示巨大的照片,只有很少的內存?
我試圖做一個基本的應用程序,顯示從相機的圖像,但我當我嘗試從BitmapFactory.decodeFile
從SD卡加載.jpg,它返回null。將大圖片加載到位圖中?
它不會給我一個內存不足的錯誤,我覺得很奇怪,但完全相同的代碼可以在較小的圖像上正常工作。
通用圖庫如何從相機顯示巨大的照片,只有很少的內存?
嘗試設置inSampleSize,如this example所示。
好了很多工作後,我發現問題不是代碼,但模擬器的RAM大小,編輯AVD和增加RAM大小解決所有問題,並輕鬆地保存huges圖片。謝謝。
下面是一個使用inSampleSize和動態地確定圖像分辨率另一種解決方案使用基於可用內存:
http://bricolsoftconsulting.com/handling-large-images-on-android/
發送:
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, o);
int REQUIRED_SIZE = 640;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while(true) {
if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2);
ByteArrayOutputStream bs2 = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, bs2);
getIntent().putExtra("byte_picture", bs2.toByteArray());
recive:
Bitmap photo = BitmapFactory.decodeByteArray(data.getByteArrayExtra("byte_picture"),0,data.getByteArrayExtra("byte_picture").length);
你甚至可以嘗試先用'inJustDecodeBounds'並將其與你的可用空間動態選擇'inSampleSize'。 – CommonsWare 2010-05-09 19:01:26