2013-09-25 144 views
1

我寫了一個相機活動,Android的指導文件說。 我保存了這張照片,然後我只想知道這張照片的寬度和高度。 但我無法使用BitmapFactory.decodeStream。 這是我的代碼,任何人都可以幫助我?Android:無法獲得相機拍攝的照片尺寸

private PictureCallback mPictureCallback = new PictureCallback() { 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
      //save the photo 
     File pictureFile = new File("/sdcard/test/test.jpg"); 
     if(!pictureFile.exists()) { 
      try { 
       pictureFile.createNewFile(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     try { 
      FileOutputStream fos = new FileOutputStream(pictureFile); 
      fos.write(data); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      Log.d(TAG, "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
      Log.d(TAG, "Error accessing file: " + e.getMessage()); 
     } 

      //get the photo's width and height 
     { 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      InputStream is = null; 
      try { 
       is = new FileInputStream("/sdcard/test/test.jpg"); 
      } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      if(is != null) { 
       Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); 
       int picWidth = bitmap.getWidth(); 
       try { 
        is.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 



     CameraActivity.this.setResult(RESULT_OK); 
     CameraActivity.this.finish(); 
    } 
}; 
+0

in「Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);」,我得到了一個null的位圖。 – abnormal

回答

0

該解決方案是否適合您?

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 

//Returns null, sizes are in the options variable 
BitmapFactory.decodeFile("/sdcard/image.png", options); 
int width = options.outWidth; 
int height = options.outHeight; 
//If you want, the MIME type will also be decoded (if possible) 
String type = options.outMimeType; 

來源:android: get image dimensions without opening it

+0

謝謝你,我的錯。我完全忘記了這一點。 – abnormal

0

如果使用inJustDecodeBounds在BitmapOptions設置爲真,
解碼器將返回null(無位),但超出領域仍將設置,允許調用者查詢該位圖不必爲其像素分配內存。

所以,如果你只想要高度的寬度值,不希望位圖本身,
使用此標誌。
就因爲這一點也,使用選項

width = options.outWidth;
height = options.outHeight;

使用別的
options.inSampleSize = 1
如果你想的位圖的非縮放版本也。

如果options.inSampleSize = x其中x>1,則返回的圖像將是原始尺寸的1/x,意味着由x縮放。

+0

也謝謝。你們真好。 – abnormal

相關問題