2010-05-09 100 views
8

我試圖做一個基本的應用程序,顯示從相機的圖像,但我當我嘗試從BitmapFactory.decodeFile從SD卡加載.jpg,它返回null。將大圖片加載到位圖中?

它不會給我一個內存不足的錯誤,我覺得很奇怪,但完全相同的代碼可以在較小的圖像上正常工作。

通用圖庫如何從相機顯示巨大的照片,只有很少的內存?

回答

11

嘗試設置inSampleSize,如this example所示。

+1

你甚至可以嘗試先用'inJustDecodeBounds'並將其與你的可用空間動態選擇'inSampleSize'。 – CommonsWare 2010-05-09 19:01:26

0

好了很多工作後,我發現問題不是代碼,但模擬器的RAM大小,編輯AVD和增加RAM大小解決所有問題,並輕鬆地保存huges圖片。謝謝。

0

發送:

     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);