我正在开发一款相机滤镜应用程序,我的目标是进行方形相机预览(裁剪,获得中心方块),并将照片拍成方形。
我正在使用Google API的getOptimalPreviewSize方法,该方法是:
private Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.1;
double targetRatio = (double) w / h;
if (sizes == null) return null;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
// Try to find an size match aspect ratio and size
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);
}
}
// Cannot find the one match the aspect ratio, ignore the requirement
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;
}
我在LG G4设备上测试,后置摄像头没问题。包括我的所有应用程序(Retrica,Instagram,设备和相机应用程序)都显示相同的预览。但是,当涉及前置摄像头时,Instagram和Retrica具有更宽的角度,而设备的相机应用程序和我的应用程序具有更窄的角度。
我不知道如何解决此问题,因为即使我将预览设置为1920 * 1080(前置摄像头的最大可用尺寸),预览就像是放大了&#34;。< / p>
有任何建议如何解决这个问题? (我的应用程序显示设备的相机应用程序显示的确切场景,但Instagram-Retrica显示有点缩小的场景。
谢谢。
(PS:我的应用程序正在SurfaceView上进行预览,这是典型的方式)