我的應用程序使用表面支架打開相機。相機以默認預覽尺寸打開。在某些設備上,默認預覽尺寸會捕獲比屏幕上實際顯示的圖像更多的圖像。爲了避免這種情況,我開始自己設置預覽大小。標準是從可用的尺寸列表中選擇最接近屏幕寬度的預覽尺寸。Android相機預覽尺寸問題
這在大多數情況下運作良好。但我經常遇到幾個不喜歡我選擇的預覽尺寸的設備。
1)Nexus 4沒有捕捉到我選擇的預覽尺寸之一的圖像。 2)三星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 = size.width - width;
optimalSize = size;
}
else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
minWidthDiff = size.width - width;
optimalSize = size;
}
minDiff = Math.abs(size.width - targetWidth);
}
}
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
對此的任何方向將真的有所幫助。
謝謝! 加甘