2024年10月26日 第38讲 通过CropRegion控制Zoom缩放 极客笔记
本讲是Android Camera专题系列的第38讲,我们介绍Android Camera2 API专题的通过CropRegion控制Zoom缩放。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
Zoom就是对画面进行放大或缩小功能,分为光学变焦(Optical Zoom)和数字变焦(Digital Zoom)两种
光学变焦 | 数字变焦 |
---|---|
光学变焦是通过物理光学手段来变焦的,也就是调整硬件的镜片间的距离实现的 | 数字变焦是软件手段,在计算机上放大图片 |
光学变焦是真实的像素,它可以原汁原味地还原远处的景物,而不会有什么质量损失 | 数字变焦是利用软件对已有像素周边的色彩进行判断,并根据周边的色彩情况插入经特殊算法加入的像素,所产生的照片是通过软件运算方式得到的 |
光学变焦的原理就是通过改变焦距的大小来改变图像的大小,而且光学变焦只是改变了光线传输的距离,光线本身没有变化,所以照片质量不会发生变化 | 数字变焦最基本的原理就是将一张已经固定的照片在进行放大,因为数码照片是使用像素组成的,所以进行变焦之后只能看到一个个的小点或者小方块 |
CameraCharacteristics | Description |
---|---|
SCALER_AVAILABLE_MAX_DIGITAL_ZOOM | 当前Camera支持的最大数字变焦倍数 active area width / crop region width 或 active area height / crop region height能支持的最大值,也就描述了最小的crop region 当crop region小于该区域时,超出的部分会被忽略 |
CONTROL_ZOOM_RATIO_RANGE | 当前Camera支持的变焦范围,包括数字和光学变焦的能力 maxZoom >= 1.0 >= minZoom, 当minZoom小于1时表示能增加FOV(手机上是指切到广角镜头) |
CaptureRequest#SCALER_CROP_REGION用于控制digital zoom的
不支持android.distortionCorrection.mode
支持android.distortionCorrection.mode
对于支持ULTRA_HIGH_RESOLUTION_SENSOR的Camera设备,当android.sensor.pixelMode设置为SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION,参考坐标系要相应地修改为activeArraySizeMaximumResolution和preCorrectionActiveArraySizeMaximumResolution.
Crop region应用于raw转其他颜色空间(比如yuv)时,因此对raw buffer不生效
当crop region的宽高比与stream size的宽高比不一致时,会发生裁减
如果crop region是16:9,那么16:9的stream能看到所有画面,4:3的stream会出现水平方向上的裁减
假设camera device的active array size为(2000,1500),且支持FREEFORM的crop
Output stream #2: 1280×720 (720p, 16:9 aspect ratio)
Case #1: 4:3 crop region with 2x digital zoom
Case #2: 16:9 crop region with ~1.5x digital zoom
Case #3: 1:1 crop region with ~2.6x digital zoom
1280×720 stream: (500, 543, 1250, 957) (垂直裁剪)
Case #4: Replace 640×480 stream with 1024×1024 stream, with 4:3 crop region
1280×720 stream: (500, 469, 1500, 1031) (垂直裁剪)
由于硬件限制或者一些对齐要求,上层在CaptureRequest里面设置的crop region可能会被Camera HAL做微调,最终实际生效的Crop region会在CaptureResult中体现。
Crop region大小不会影响到Sensor输出大小,Sensor输出不同的Size都会被mapping到Active array size上来进行计算;这里Active array size仅表示当前sensor mode下sensor输出的全尺寸,并不是sensor输出大小
从API Level 30开始,在Logical multicam中强烈建议通过CONTROL_ZOOM_RATIO来控制Zoom,因为该控制方式会结合光学变焦和数字变焦的能力,甚至可以缩小到1倍zoom以下
本文链接:http://so.lmcjl.com/news/16273/