2011-11-05 84 views
1

我想將位圖中的JPEG轉換爲mat。我知道Utils方法只支持RGB888格式的圖像,所以我強制我的相機採用JPEG格式,拍攝圖片,解碼並將其轉換爲RGB 888格式,然後調用utils方法以從中獲取墊子。這是基本的代碼:android opencv Utils.BitmapToMap運行時異常幫助?

Bitmap imageBitmap = BitmapFactory.decodeByteArray(mData, 0, mData.length); 
double scale = 0.5; // Make the image smaller incase I was running out of memeory. 
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int) (imageBitmap.getWidth() * scale), 
        (int) (imageBitmap.getHeight() * scale), false); 

imageBitmap = PNGtoRGB888(imageBitmap); 
Mat m = Utils.bitmapToMat(imageBitmap); // I get a runtime exception 

這裏是PNGtoRGB888方法:

private Bitmap PNGtoRGB888(Bitmap _img) 
    { 
     int numPixels = _img.getWidth() * _img.getHeight(); 
     int[] pixels = new int[numPixels]; 

     // Get Bitmap's pixels. Each int is the color values for one pixel. 
     _img.getPixels(pixels, 0, _img.getWidth(), 0, 0, _img.getWidth(), _img.getHeight()); 

     // Create a Bitmap of the appropriate format. 
     Bitmap result = Bitmap.createBitmap(_img.getWidth(), _img.getHeight(), Config.ARGB_8888); 

     // Set RGB pixels. 
     result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight()); 
     return result; 
    } 

任何想法,爲什麼我會得到運行時異常?!?!?!?

+0

當我調用Mat m = Utils.bitmapToMap(imageBitMap);我很確定底層的異常是內存不足。 – segFault

回答

0

我不得不重新安排我的構建路徑和它的工作。

0

您可能希望創建一個SoftReference的用於ImageBitMap

SoftReference<BitMap> bimap = 
    new SoftRerenceBitmap<Bitmap>(BitmapFactory.decodeByteArray(
      mData, 0, mData.length); 
+0

它仍然不起作用。我甚至將相機的分辨率設置爲960 X 430,並且當圖像傳入時,我將其複製並刪除原件。 – segFault