Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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 ExiFinInterface抛出FileNotFoundException_Android_Bitmap_Exif - Fatal编程技术网

Android ExiFinInterface抛出FileNotFoundException

Android ExiFinInterface抛出FileNotFoundException,android,bitmap,exif,Android,Bitmap,Exif,我正在尝试在Android中旋转位图,并在ImageView中显示定向位图 uri = Uri.parse(path) try { Bitmap myBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); Bitmap orientedBitmap = ExifUtil.rotateBitmap(path, myBitmap); imageView.setIm

我正在尝试在Android中旋转位图,并在ImageView中显示定向位图

uri = Uri.parse(path)
try {
    Bitmap myBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
    Bitmap orientedBitmap = ExifUtil.rotateBitmap(path, myBitmap);
    imageView.setImageBitmap(orientedBitmap);
} catch (IOException e) {
    e.printStackTrace();
}
然后用一个ExifUtil从我尝试旋转它

public class ExifUtil {
    public static Bitmap rotateBitmap(String src, Bitmap bitmap) {
        try {
            int orientation = getExifOrientation(src);

            if (orientation == ExifInterface.ORIENTATION_NORMAL) {
                return bitmap;
            }

            Matrix matrix = new Matrix();
            switch (orientation) {
                case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
                    matrix.setScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    matrix.setRotate(180);
                    break;
                case ExifInterface.ORIENTATION_FLIP_VERTICAL:
                    matrix.setRotate(180);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_TRANSPOSE:
                    matrix.setRotate(90);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    matrix.setRotate(90);
                    break;
                case ExifInterface.ORIENTATION_TRANSVERSE:
                    matrix.setRotate(-90);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    matrix.setRotate(-90);
                    break;
                default:
                    return bitmap;
            }

            try {
                Bitmap oriented = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                bitmap.recycle();
                return oriented;
            } catch (OutOfMemoryError e) {
                e.printStackTrace();
                return bitmap;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } 

        return bitmap;
    }

    private static int getExifOrientation(String src) throws IOException {
        int orientation = ExifInterface.ORIENTATION_UNDEFINED;
        Log.e("src", src);
        try {
            ExifInterface exif = new ExifInterface(src);
            orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, orientation);
        } catch (SecurityException | IllegalArgumentException e) {
            e.printStackTrace();
        }

        return orientation;
    }
}
它给我这个日志

11-17 17:03:20.265 3962-3962/it.package.path E/src: file:///storage/emulated/0/DCIM/image20171117_170310.jpg
11-17 17:03:30.781 3962-3962/it.package.path W/System.err: java.io.FileNotFoundException: file:/storage/emulated/0/DCIM/image20171117_170310.jpg (No such file or directory)
11-17 17:03:30.784 3962-3962/it.package.path W/System.err:     at java.io.FileInputStream.open(Native Method)
11-17 17:03:30.786 3962-3962/it.package.path W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:146)
11-17 17:03:30.787 3962-3962/it.package.path W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:99)
11-17 17:03:30.789 3962-3962/it.package.path W/System.err:     at android.media.ExifInterface.<init>(ExifInterface.java:1106)
11-17 17:03:30.791 3962-3962/it.package.path W/System.err:     at it.package.path.ExifUtil.getExifOrientation(ExifUtil.java:68)
11-17 17:03:30.794 3962-3962/it.package.path W/System.err:     at it.package.path.ExifUtil.rotateBitmap(ExifUtil.java:13)
11-17 17:03:30.795 3962-3962/it.package.path W/System.err:     at it.package.path.PreviewFragment.onCreateView(PreviewFragment.java:57)
11-17 17:03:30.797 3962-3962/it.package.path W/System.err:     at android.app.Fragment.performCreateView(Fragment.java:2352)
11-17 17:03:30.799 3962-3962/it.package.path W/System.err:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995)
11-17 17:03:30.800 3962-3962/it.package.path W/System.err:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171)
11-17 17:03:30.801 3962-3962/it.package.path W/System.err:     at android.app.BackStackRecord.run(BackStackRecord.java:815)
11-17 17:03:30.802 3962-3962/it.package.path W/System.err:     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1582)
11-17 17:03:30.804 3962-3962/it.package.path W/System.err:     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:483)
11-17 17:03:30.806 3962-3962/it.package.path W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
11-17 17:03:30.808 3962-3962/it.package.path W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-17 17:03:30.809 3962-3962/it.package.path W/System.err:     at android.os.Looper.loop(Looper.java:154)
11-17 17:03:30.811 3962-3962/it.package.path W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6692)
11-17 17:03:30.813 3962-3962/it.package.path W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
11-17 17:03:30.815 3962-3962/it.package.path W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
11-17 17:03:30.816 3962-3962/it.package.path W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
11-17:03:20.265 3962-3962/it.package.path E/src:file:///storage/emulated/0/DCIM/image20171117_170310.jpg
11-17 17:03:30.781 3962-3962/it.package.path W/System.err:java.io.FileNotFoundException:file:/storage/emulated/0/DCIM/image20171117_170310.jpg(没有这样的文件或目录)
11-17 17:03:30.784 3962-3962/it.package.path W/System.err:at java.io.FileInputStream.open(本机方法)
11-17 17:03:30.786 3962-3962/it.package.path W/System.err:at java.io.FileInputStream.(FileInputStream.java:146)
11-17 17:03:30.787 3962-3962/it.package.path W/System.err:at java.io.FileInputStream.(FileInputStream.java:99)
11-17 17:03:30.789 3962-3962/it.package.path W/System.err:at-android.media.ExifInterface.(ExifInterface.java:1106)
11-17 17:03:30.791 3962-3962/it.package.path W/System.err:at it.package.path.ExifUtil.getExiforOrientation(ExifUtil.java:68)
11-17 17:03:30.794 3962-3962/it.package.path W/System.err:at it.package.path.ExifUtil.rotateBitmap(ExifUtil.java:13)
11-17 17:03:30.795 3962-3962/it.package.path W/System.err:at it.package.path.PreviewFragment.onCreateView(PreviewFragment.java:57)
11-17 17:03:30.797 3962-3962/it.package.path W/System.err:at-android.app.Fragment.performCreateView(Fragment.java:2352)
11-17 17:03:30.799 3962-3962/it.package.path W/System.err:at-android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995)
11-17 17:03:30.800 3962-3962/it.package.path W/System.err:at-android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171)
11-17 17:03:30.8013962-3962/it.package.path W/System.err:at-android.app.BackStackRecord.run(BackStackRecord.java:815)
11-17 17:03:30.802 3962-3962/it.package.path W/System.err:at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1582)
11-17 17:03:30.804 3962-3962/it.package.path W/System.err:at-android.app.FragmentManagerImpl$1.run(FragmentManager.java:483)
11-17 17:03:30.806 3962-3962/it.package.path W/System.err:at-android.os.Handler.handleCallback(Handler.java:751)
11-17 17:03:30.808 3962-3962/it.package.path W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:95)
11-17 17:03:30.809 3962-3962/it.package.path W/System.err:at-android.os.Looper.loop(Looper.java:154)
11-17 17:03:30.8113962-3962/it.package.path W/System.err:at-android.app.ActivityThread.main(ActivityThread.java:6692)
11-17 17:03:30.813 3962-3962/it.package.path W/System.err:at java.lang.reflect.Method.invoke(本机方法)
11-17 17:03:30.815 3962-3962/it.package.path W/System.err:在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
11-17 17:03:30.816 3962-3962/it.package.path W/System.err:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
为什么ExifInterface exif=新ExifInterface(src);`在缺少两个斜杠的文件路径上抛出FileNotFoundException?

从该路径中删除“file://”,从而得到一个真正的文件系统路径

/storage/emulated/0/DCIM/image20171117_170310.jpg
从该路径中删除“file://”,这样就得到了一个真正的文件系统路径

/storage/emulated/0/DCIM/image20171117_170310.jpg

因为这就是路径。
path
从哪里来?@commonware我从一个摄像头结果中得到它。问题是src=path,正如您可以从
Log.e(“src”,src)中看到的那样src(和路径)=
file:///storage/...
而FileNotFound用于
文件:/storage/…
。为什么会丢失两个斜杠?真正的问题是:为什么要将
Uri的
String
形式传递给需要文件系统路径的方法?传递文件系统路径,而不是
Uri
。因为这就是
路径。
path
从哪里来?@commonware我从一个摄像头结果中得到它。问题是src=path,正如您可以从
Log.e(“src”,src)中看到的那样src(和路径)=
file:///storage/...
而FileNotFound用于
文件:/storage/…
。为什么会丢失两个斜杠?真正的问题是:为什么要将
Uri的
String
形式传递给需要文件系统路径的方法?传递文件系统路径,而不是
Uri