Android:无法获取相机活动拍摄的照片尺寸

时间:2013-09-25 08:38:53

标签: android bitmap camera width photo

我在Android的指南文件中写了一个相机活动。 我保存了照片,然后我只想知道这张照片的宽度和高度。 但我无法通过BitmapFactory.decodeStream获取它。 这是我的代码,任何人都可以帮助我吗?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您在BitmapOptions中使用inJustDecodeBounds设置为true,则 解码器将返回null(无位图),但out字段仍将被设置,允许调用者查询位图而无需为其像素分配内存。

因此,如果您只想要高度宽度值并且不想要位图本身,请使用此标志。
为此,请使用选项

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

否则请使用
options.inSampleSize = 1如果您还想要非缩放版的位图。

如果options.inSampleSize = x其中x>1,则返回的图像将是原始尺寸的1 / x,表示按x缩放。