我正在制作一个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你能解释一些代码吗? –