我在安卓上遇到了相機問題,基本上當我使用相機類拍攝照片時,拍攝的輸出圖片實際上顯示的不僅僅是預覽。最好的方法是預覽被裁剪。我將如何解決這個問題?安卓相機 - 拍攝的圖片與預覽不一致
我已經在三星Galaxy S4,三星Galaxy S3,HTC One M8和Nexus One上運行該應用程序,並且都展示了同樣的問題。 (全部運行Android 4.0 ICS)
相機預覽全屏顯示在沒有操作欄且隱藏狀態欄的活動中。
我試圖創建的相機是人像,所以我已經設置displayOrientation至90
我利用它來確定預覽大小和輸出的照片尺寸的代碼如下(我相信這個問題是最有可能這裏的某個地方):
public static Camera.Size getBestAspectPreviewSize(int displayOrientation,
int width,
int height,
Camera.Parameters parameters,
double closeEnough) {
double targetRatio=(double)width/height;
Camera.Size optimalSize=null;
double minDiff=Double.MAX_VALUE;
if (displayOrientation == 90 || displayOrientation == 270) {
targetRatio=(double)height/width;
}
List<Size> sizes=parameters.getSupportedPreviewSizes();
Collections.sort(sizes,
Collections.reverseOrder(new SizeComparator()));
for (Size size : sizes) {
double ratio=(double)size.width/size.height;
if (Math.abs(ratio - targetRatio) < minDiff) {
optimalSize=size;
minDiff=Math.abs(ratio - targetRatio);
}
if (minDiff < closeEnough) {
break;
}
}
return(optimalSize);
}
public static Camera.Size getLargestPictureSize(CameraHost host,
Camera.Parameters parameters,
boolean enforceProfile) {
Camera.Size result=null;
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
// android.util.Log.d("CWAC-Camera",
// String.format("%d x %d", size.width, size.height));
if (!enforceProfile
|| (size.height <= host.getDeviceProfile()
.getMaxPictureHeight() && size.height >= host.getDeviceProfile()
.getMinPictureHeight())) {
if (result == null) {
result=size;
}
else {
int resultArea=result.width * result.height;
int newArea=size.width * size.height;
if (newArea > resultArea) {
result=size;
}
}
}
}
if (result == null && enforceProfile) {
result=getLargestPictureSize(host, parameters, false);
}
return(result);
}
尺寸比較類:
private static class SizeComparator implements
Comparator<Camera.Size> {
@Override
public int compare(Size lhs, Size rhs) {
int left=lhs.width * lhs.height;
int right=rhs.width * rhs.height;
if (left < right) {
return(-1);
}
else if (left > right) {
return(1);
}
return(0);
}
}
這是使用CWAC攝像頭,並使用SimpleCameraHost沒有變化。
任何幫助表示讚賞!
我做了useFullBleedPreview()返回false,但我仍然有同樣的問題。你認爲這與變焦有關嗎?還是因爲預覽被裁剪而拍攝的照片不是? –
@DavidXu:如果你的預覽沒有改變,那麼有些事情是錯誤的 - 要麼你沒有正確禁用全面預覽,要麼在庫中有一個錯誤。 – CommonsWare
我在我的自定義CameraHost中覆蓋useFullBleedPreview()以返回false,這不應該足夠嗎? –