【问题标题】:Android: Can't get the size of photo taken by camera acitivityAndroid:无法获取相机活动拍摄的照片大小
【发布时间】:2013-09-30 18:12:04
【问题描述】:

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

【问题讨论】:

  • 在“Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);”中,我得到了一个空位图。

标签: android bitmap camera width photo


【解决方案1】:

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

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

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

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


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

【讨论】:

  • 也谢谢你。你们真好。
【解决方案2】:

这个解决方案对你有用吗?

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

【讨论】:

  • 谢谢你,我的错。我完全忘记了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多