0

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

2 回答 2

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:无需打开即可获取图像尺寸

于 2013-09-25T08:50:22.723 回答
0

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

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

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

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

如果options.inSampleSize = xwhere x>1,则返回的图像将是原始大小的 1/x,表示按 x 缩放。

于 2013-09-25T08:57:07.183 回答