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

如何拍摄与预览大小相同宽高比的照片?

庾才
2023-03-14

标题问题99.9%的答案如下:

当您在列表中搜索时

这很好,但是如果我找不到与预览尺寸相同宽高比的图片尺寸(Android系统不能保证相机支持的每个预览尺寸都有相同宽高比的图片尺寸),以及所有其他图片尺寸(尽可能接近)只是伸展我的照片,因为在这个和这个问题?如何使照片的宽高比与预览完全相同,即使相机中设置了图片大小和预览大小。参数有不同的长宽比?


共有1个答案

匡凌
2023-03-14

在这个答案中,我们可以了解解决这个问题的一般方法。简短引述:

我的解决方案是首先将预览选择矩形缩放为本机相机图片大小。然后,现在我知道本机分辨率的哪个区域包含我想要的内容,我可以执行类似的操作,然后将本机分辨率上的矩形缩放到每个相机实际捕获的较小图片。参数。设置图片大小。

现在,到实际的代码。执行缩放的最简单方法是使用矩阵。它有方法矩阵#setRectToRect(android.graphics.RectF,android.graphics.RectF,android.graphics.矩阵。ScaleToFit),我们可以这样使用:

// Here previewRect is a rectangle which holds the camera's preview size,
// pictureRect and nativeResRect hold the camera's picture size and its 
// native resolution, respectively.
RectF previewRect = new RectF(0, 0, 480, 800),
      pictureRect = new RectF(0, 0, 1080, 1920),
      nativeResRect = new RectF(0, 0, 1952, 2592),
      resultRect = new RectF(0, 0, 480, 800);

final Matrix scaleMatrix = new Matrix();

// create a matrix which scales coordinates of preview size rectangle into the 
// camera's native resolution.
scaleMatrix.setRectToRect(previewRect, nativeResRect, Matrix.ScaleToFit.CENTER);

// map the result rectangle to the new coordinates
scaleMatrix.mapRect(resultRect);

// create a matrix which scales coordinates of picture size rectangle into the 
// camera's native resolution.
scaleMatrix.setRectToRect(pictureRect, nativeResRect, Matrix.ScaleToFit.CENTER);

// invert it, so that we get the matrix which downscales the rectangle from 
// the native resolution to the actual picture size
scaleMatrix.invert(scaleMatrix);

// and map the result rectangle to the coordinates in the picture size rectangle
scaleMatrix.mapRect(resultRect);

在所有这些操作之后,resultRect将保存相机拍摄的照片内部区域的坐标,该坐标与您在应用程序预览中看到的图像完全相同。您可以使用BitMapRegionCoder从图片中剪切此区域。html#decodeRegion(android.graphics.Rect、android.graphics.BitmapFactory.Options)方法。

就这样。

 类似资料:
  • 我写了这段代码,用相机拍照,然后将其转换为jpeg文件并将其上传到Parse.com作为ParseFile。 问题是,图片非常小(153 x 204像素),质量非常低。 我需要图片是至少5 MP质量和裁剪到300x300像素。 这是我现在使用的代码。 提前感谢。

  • 可使用前端相机或背面相机拍摄照片。 A ) (显示模式) 轻触图标可切换为显示模式。 B ) (位置数据)/(切换相机)/(切换图像大小) 启用位置数据的使用设定即可显示(位置数据)。轻触图标可使用Wi-Fi、GPS*、手机基地台*的信息取得位置数据。取得后会显示(已取得位置数据),拍摄照片时会同时记录位置数据。 * 仅限3G/Wi-Fi机种 C ) (快门) 轻触图标可拍摄照片。 D ) 已拍摄

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

  • 比较很简单:我用使用CameraManager的自定义相机拍照。然后,我用默认的Galaxy Note 5相机拍摄同一张照片。CameraManager可用的最大尺寸是1836年的3264,所以我使用它,并将三星相机的分辨率设置为相同的分辨率。结果 注5:我可以在照片中看到细节 相机经理:我看不到细节。图像质量很低。 然后我尝试将CameraManager照片设置为 仍然没有变化。嗯,只有一个变化

  • 我需要捕捉多张照片使用Camera2 API后,特定的间隔,如5秒。我需要在没有预演的情况下做。我可以捕获一张单张照片没有预览,但我需要知道如何捕获多张照片?一旦相机打开,我不想一次又一次地设置所有的参数,我只想在特定的间隔后捕捉照片,一旦所有的照片都捕捉到了,然后我会关闭相机。 也只是第一次被捕获的图像。第二次调用takepciture()方法时,什么也没有发生。 下面是我的代码。

  • 本文向大家介绍Android调用系统照相机拍照与摄像的方法,包括了Android调用系统照相机拍照与摄像的方法的使用技巧和注意事项,需要的朋友参考一下 前言   在很多场景中,都需要用到摄像头去拍摄照片或视频,在照片或视频的基础之上进行处理。但是Android系统源码是开源的,很多设备厂商均可使用,并且定制比较混乱。一般而言,在需要用到摄像头拍照或摄像的时候,均会直接调用系统现有的相机应用,去进行