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

inJustDecodeBoundsBitmapOptions で set as trueを使用すると
、デコーダーは null (ビットマップなし) を返しますが、out フィールドは引き続き設定されるため、呼び出し元はピクセルにメモリを割り当てることなくビットマップをクエリできます。

高さ幅の値だけが必要で、ビットマップ自体は不要な場合は、
このフラグを使用します。
そのためにも、オプションを使用します

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

それ以外
options.inSampleSize = 1
の場合は、ビットマップのスケーリングされていないバージョンも必要な場合に使用します。 whereの

場合、返される画像は元のサイズの 1/x になり、x でスケーリングされたことを意味します。options.inSampleSize = xx>1

于 2013-09-25T08:57:07.183 に答える