当前位置: 首页 > 知识库问答 >
问题:

Android camera2 YUV 2048x1536拍摄的图像被拉伸(不是预览)

周睿范
2023-03-14

我试图捕捉一个YUV图像,但被拉伸了。我正在使用Android Camera2,访问https://html" target="_blank">github.com/googlearchive/android-camera2basic。Android SDK是28。

当我使用ImageReader从setOnImageAvailableListener()方法捕获YUV2048x1536中的相机帧时,我面临一个奇怪的行为。捕获是拉伸的:

YUV 2048X1536拉伸

我做的事:

pictureImageReader.setOnImageAvailableListener(
            reader -> {
              Image image = reader.acquireLatestImage();
              if(image != null){
                ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                byte[] bytes = new byte[buffer.capacity()];
                buffer.get(bytes);
                Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
                image.close();
              }
            }, mBackgroundHandler);

若要将图像转换为位图,我使用了以下操作:如何将Android.Media.image转换为位图对象?:

Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);

但是,如果我改变分辨率,我的捕获是好的(YUV960x720):

YUV 960X720正常

我不知道为什么YUV2048x1536的捕获被拉伸,而YUV960x720不是。唯一的变化是分辨率

谢谢

共有1个答案

颛孙建业
2023-03-14

设备是否实际将2048x1536列为其流配置映射中支持的大小?有时相机设备会接受一个它们实际上没有列出的分辨率,但随后无法正确输出它。

如果列出了该大小,那么不幸的是,这可能只是该设备摄像头实现上的一个bug。

(而且,看起来您捕获的是JPEG图像,而不是未压缩的YUV,这并不一定重要)。

 类似资料:
  • 可以在 Adobe Bridge 的“预览”面板中,以全屏预览和审阅模式预览图像。“预览”面板会显示多达九张缩览图图像供您快速比较。全屏预览会以全屏方式显示图像。审阅模式以全屏视图显示图像,允许您在图像中导航,优化选择,标记、旋转图像和给图像评级,以及在 Camera Raw 中打开图像。 以幻灯片放映的方式查看图像 使用“幻灯片放映”命令可以全屏幕幻灯片放映的方式查看缩览图。在处理一个文件夹中所

  • 拍摄图像或影像 安装PSP™专用的摄影机(选购品)后,可拍摄静止图像或影像。拍摄后的静止图像或影像会被保存至Memory Stick™或主机内存中。使用PSP™摄影机机能时,请遵守一般礼仪适切使用。 提示 拍摄的图像会被保存至Memory Stick™或主机内存中。 初期设定的保存位置为主机内存。若要变更为Memory Stick™,请在操作接口选择(设定)>[保存位置]。   准备 1. 将摄影

  • 我有一个按钮,它向用户提供选择,他是否想要从画廊或相机的图像。当用户从图库拍摄图像时,我能够成功地将图像上传到Firebase存储,但是当用户选择相机时,我无法将图像上传到存储。这是用户选择相机时的onActivityResult代码 它将图像上传到我的imageview,但给我错误提示 当我尝试上载到存储时 我在stack overflow上遇到了一个类似的问题。 我认为公认的答案是错误的,因为

  • 所以我遇到了一个问题,前面在我提问的问题中提到过:将图像(ACTION_image_CAPTURE)上载到Firebase存储 我对这个问题进行了更多的搜索,并应用了Android Studio文档:https://developer.android.com/training/camera/photobasics.html#TaskPhotoView 所以,在您阅读代码之前,我基本上想说一下需要什

  • Take a snapshot and save on the Wifi Block.

  • 问题内容: 我启动了一项活动以从相机捕获图片: 您能告诉我如何获取拍摄图片的URI吗? 问题答案: 要获取刚从相机拍摄的图像,请执行以下操作