我正在製作一個android自定義相機應用程序。其中我想從前置攝像頭拍攝一張照片並保存並顯示給用戶。但我在這裏面臨一些問題。有些設備工作得非常完美,但其他設備的效果並不理想,實際上它們是從頂部切割圖像的。我已經提出了另一個問題here,但發現沒有好的答案如何捕捉相機預覽中顯示的圖像,並切出其長度和寬度
我與三件事情鬥爭,這是相機的最佳resoultion,屏幕大小(寬度和高度)和相機拍攝的位圖的寬度和高度。我的應用程序在其他設備上運行良好,但由於其分辨率太高,無法在Lg上運行。
我將前置攝像頭的最佳分辨率設置爲1776 * 1080,而我將屏幕尺寸設置爲1440 * 2392,但攝像頭拍攝的圖片的寬度和高度爲1280 * 960。現在問題依然存在。我不知道如何獲得如相機預覽所示的相同圖像,我不希望任何角落被切斷。那麼如何做到這一點。以下是我對獲得optimalcamera suize代碼....
public static Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.1;
double targetRatio=(double)h/w;
if (sizes == null) return null;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
for (Camera.Size size : sizes) {
double ratio = (double) size.width/size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
,這裏是我如何得到屏幕寬度和高度
DisplayMetrics displaymetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHeight = displaymetrics.heightPixels;
int screenWidth = displaymetrics.widthPixels;
以下是我設置參數的方法:
Camera.Size previewSize = getOptimalPreviewSize(previewSizes,screenWidth,screenHeight);
parameters.setPreviewSize(previewSize.width,previewSize.height);
parameters.setZoom(Camera.Parameters.FOCUS_DISTANCE_OPTIMAL_INDEX);
camera.setParameters(parameters);
**
那麼,我怎樣才能得到完整的照片,如相機預覽所示。 ?請幫我
**
如果您想獲得與相機預覽顯示的圖像相同的圖像,則需要爲您的相機設置'setPictureSize()'。首先,在'getSupportedPictureSizes()'上循環,然後找到最接近您的預覽尺寸(具有相同寬高比)。 –
你有解決這個問題嗎?這裏有同樣的問題。 –
@DuyPham你能解釋一些代碼嗎? –