我的应用程序使用表面支架打开相机.相机将以默认预览尺寸打开.在某些设备上,默认预览大小会捕获比屏幕上实际可见的图像更多的图像.为了避免这种情况,我开始自己设置预览大小.标准是从可用的尺寸列表中选择预览尺寸,该尺寸最接近屏幕的宽度.
这在大多数情况下效果很好.但我经常偶然发现一些不喜欢我选择的预览尺寸的设备.
1)Nexus 4没有捕获我选择的预览尺寸之一的图像.2)Samsung S 4沿拍摄的图像提供线条(噪声).
所以我想了解我是否正在做任何违反标准的事情.以下是我的问题: -
1)我正在使用表面支架打开相机.有没有其他方法可以在我的应用程序中使用相机硬件.
2)我从可用尺寸列表中选择预览尺寸.在选择任何尺寸之前,我应该寻找哪些具体的东西?选择尺寸的逻辑如下: -
private Camera.Size getBestPreviewSize(int width, int height)
{
List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = height;
int targetWidth = width;
int minWidthDiff = 0;
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.width - targetWidth) < minDiff) {
if(size.width > width) {
if (minWidthDiff == 0) {
minWidthDiff = …Run Code Online (Sandbox Code Playgroud)