我创建了一个自定义相机应用程序,在拍摄照片后,我在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();
}
}
});
}