Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:Can';I don’我不知道照相机拍摄的照片的大小_Android_Bitmap_Camera_Width_Photo - Fatal编程技术网

Android 安卓:Can';I don’我不知道照相机拍摄的照片的大小

Android 安卓:Can';I don’我不知道照相机拍摄的照片的大小,android,bitmap,camera,width,photo,Android,Bitmap,Camera,Width,Photo,正如Android的指南文档所说,我写了一个摄像头活动。 我保存了这张照片,然后我只想知道这张照片的宽度和高度。 但我无法用BitmapFactory.decodeStream获取它。 这是我的密码,有人能帮我吗 private PictureCallback mPictureCallback = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) {

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

这个解决方案对你有效吗

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;

来源:

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

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

width=options.outWidth
height=options.outHeight;

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




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

在“位图位图=BitmapFactory.decodeStream(is,null,options);”中,我得到了一个空的位图。谢谢,我的错。我完全忘了,也谢谢你。你们真是太好了。