首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camera2控制图像定向

Camera2控制图像定向
EN

Stack Overflow用户
提问于 2020-02-29 15:27:43
回答 1查看 609关注 0票数 1

我创建了基于Google camera2样例的摄像头屏幕,所有代码几乎相同,相机拍摄照片并以JPEG格式保存在设备上,但我有一些奇怪的行为。

例如,从仿真器拍摄的照片使图像旋转90度(图像旋转,而不是预览),在我的华为上,图像没有旋转。

奇怪的是,屏幕旋转和传感器定位值在模拟器和华为上都是相同的。那么,jpeg方向究竟是如何设置的呢?

在探索CaptureRequest.JPEG_ORIENTATION的同时

代码语言:javascript
复制
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation))

我注意到这种方法对仿真程序没有任何影响,在所有的

在保存位图后,我一直试图从JPEG中获得ExifInterface的定位,但是在模拟器和华为中,这个值都是ORIENTATION_UNDEFINED。也许在将Image(从ImageReader)转换为File时,忽略了Exif标记?

也许我需要在拍摄图像时手动设置ExifInterface,但是如果值是相同的,有什么区别呢?我们应该如何控制JPEG方向?

用该方法得到的定位结果(从谷歌camera2样本中得到的结果)对模拟器和华为来说是90度。

代码语言:javascript
复制
private int getOrientation(int rotation) {
        return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360;
    }

使用此方法从Bitmap中获取ImageReader

代码语言:javascript
复制
public static Bitmap getBitmapFromReader(ImageReader reader) {

    Bitmap bitmap = null;
    Image image = null;

    try {
        image = reader.acquireLatestImage();
        Image.Plane[] planes = image.getPlanes();
        ByteBuffer buffer = planes[0].getBuffer();
        buffer.rewind();
        byte[] data = new byte[buffer.capacity()];
        buffer.get(data);
        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

    } catch (Exception e) {
        e.printStackTrace();
    }
    if (image != null) {
        image.close();
    }

    return bitmap;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-29 21:17:58

模拟器是使用Camera2 API的一个非常糟糕的起点。本质上,它有遗留的Camera2支持,还有一些怪癖。

这就是说,在Android相机上,Jpeg定位是一个非常微妙的话题。官方文档解释说,旋转请求可能只适用于图像本身,或者只适用于EXIF标志,但有些设备(您测试了哪些华威?)一点也不服从。

还请注意BitmapFactory.decodeByteArray() ignores the EXIF flagsince the very beginning

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60466670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档