Glide不会以正确的方向旋转图像

时间:2017-12-15 13:40:58

标签: android bitmap rotation android-glide

我创建了一个自定义相机应用程序,在拍摄照片后,我在imageview中设置了位图。我使用的是名为 GLIDE 的库。要在正确的方向上旋转图像,我将从输入流中获取Exif信息。

拍摄人像后, onPictureTaken 会返回字节[]。检查字节[]后,返回的Exif标签为 ExifInterface.ORIENTATION_NORMAL ,这意味着图像旋转正常,不需要再旋转。但是,图像视图中由Glide设置的图像是横向而不是纵向,并且需要旋转90度。滑动库中可能会有一些自动旋转图像的内容。有人有任何想法吗?

感谢任何帮助。代码如下:

public void onPictureTaken(byte[] data, Camera camera) {
 Glide.with(this)
                .load(data)
                .asBitmap().override(height, width) // resizes the image to these dimensions (in pixel)
                .centerCrop()
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
                        try {
                            InputStream is = new ByteArrayInputStream(data);
                            Metadata metadata = ImageMetadataReader.readMetadata(is);
                            final ExifIFD0Directory exifIFD0Directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
                            Matrix mtx = new Matrix();
                            int w = bitmap.getWidth();
                            int h = bitmap.getHeight();

                            if (exifIFD0Directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
                                final int exifOrientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION); //checking Exif here it returns image is normal
                                switch (exifOrientation) {
                                    case ExifInterface.ORIENTATION_NORMAL:

                                        break;
                                    case ExifInterface.ORIENTATION_ROTATE_90:
                                        mtx.postRotate(90);
                                        break;
                                    case ExifInterface.ORIENTATION_ROTATE_180:
                                        mtx.postRotate(180);
                                        break;

                                    case ExifInterface.ORIENTATION_ROTATE_270:
                                        mtx.postRotate(270);
                                        break;
                                }
                            }

                            photo = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);

                            Imageview.setImageBitmap(photo);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }

                });
}

0 个答案:

没有答案