1

タイトルと同じように単純ですが、BitmapFactory.decodeFileで開かれたファイルは、ImageViewに表示されるときに間違った方向になります。カメラからキャプチャされてtmpファイルに保存された画像。デバイスにdata.getData()nullを返すバグがある場合は、少なくともファイルへの参照があります。

これは、カメラアクティビティを開始し、画像ファイルをキャプチャするだけです。

private void startCamera() {
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    if (hasImageCaptureBug()) {
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Constants.TMPFILE_PATH)));
    } else {
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    }
    startActivityForResult(intent, CAMERA_PIC_REQUEST);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST) {
        if (resultCode == RESULT_OK) {
            Uri uri = null;

            if (hasImageCaptureBug()) {
                File f = new File(Constants.TMPFILE_PATH);
                try {
                    uri = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), f.getAbsolutePath(), null, null));
                } catch (FileNotFoundException e) {

                }
            } else {
                uri = data.getData();
            }

            imageFilePath = Image.getPath(this, uri);

            if (Image.exists(imageFilePath)) {
                ImageView image = (ImageView) findViewById(R.id.thumbnail);
                int targetW     = (int) getResources().getDimension(R.dimen.thumbnail_screen_width);
                int degrees     = (int) Image.getRotation(this, uri);

                Bitmap bmp = Image.resize(imageFilePath, targetW);
                bmp = Image.rotate(bmp, degrees);

                image.setAdjustViewBounds(true);
                image.setImageBitmap(bmp);
            }
        }
    }
}

そして、このファイルは画像のサイズを変更します

public class Image {
    public static Bitmap resize(String pathName, int targetW) {
        BitmapFactory.Options opts = new BitmapFactory.Options();
        opts.inJustDecodeBounds = true;

        Bitmap bmp = BitmapFactory.decodeFile(pathName, opts);

        int photoW = opts.outWidth;
        int photoH = opts.outHeight;
        int targetH = Math.round((photoH * targetW) / photoW);
        int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

        opts.inJustDecodeBounds = false;
        opts.inSampleSize = scaleFactor;
        opts.inPurgeable = true;

        bmp = BitmapFactory.decodeFile(pathName, opts);

        return bmp;
    }
}

ExifOrientationを取得しようとしましたが、ロードしたときにファイル自体が正しい方向に表示されるため、常に0になります。ファイルは間違った方向で表示されます。

よろしく

4

1 に答える 1

0

画像をプレビューするための私の問題はConstants.TMPFILE_PATHだったようです、画像はそこに保存されませんでした、私はこの修正を使用しますAndroidの画像ビューレイアウトで撮影された最新の写真を表示します!サーバー...回答済みとしてこれを確認し、これに対する新しい質問を開きます...


編集済み

この問題を解決するには、新しい画像をリファクタリングしてからサーバーにアップロードします。これは、ファイル自体の生データのexifの向きが間違っていたためです。

于 2012-08-17T22:01:50.640 に答える