我发现当使用纹理视图而不是表面视图作为相机预览(两者都通过媒体记录器连接到相机)时,预览会更加模糊。
我所说的模糊是指在纹理视图中您可以看到像素,尤其是在缩放时。使用表面视图时并非如此。为什么会这样?
我发现当使用纹理视图而不是表面视图作为相机预览(两者都通过媒体记录器连接到相机)时,预览会更加模糊。
我所说的模糊是指在纹理视图中您可以看到像素,尤其是在缩放时。使用表面视图时并非如此。为什么会这样?
UPD:对不起,但是我重新写了我的狗屎代码后,关键是预览尺寸太小导致“模糊”,所以你应该设置一个合理的预览尺寸,而不是下面删除的原因,但建议自动对焦。 ..
Size size = getBestSupportSize(parameters.getSupportedPreviewSizes(), width, height);
parameters.setPreviewSize(size.width, size.height);
至于方法getBestSupportSize()
,如何获得bestSize
适合您项目需要的,在这种情况下,它与屏幕宽度一样大,比例是您的4/3,可能是其他的,我计算比例划分width/height
。
private Size getBestSupportSize(List<Size> sizes, int width, int height) {
Size bestsize = sizes.get(0);
int screenWidth = getResources().getDisplayMetrics().widthPixels;
int dt = Integer.MAX_VALUE;
for (int i = sizes.size() - 1; i >= 0; i--) {
Log.d(TAG, "-index : " + i);
Size s = sizes.get(i);
if (s.width * 3.0f / 4 == s.height) {
int newDT = Math.abs(screenWidth - s.width);
if (newDT < dt && screenWidth < s.width) {
dt = newDT;
bestsize = s;
}
}
}
return bestsize;//note that if no "4/3" size supported,default return size[0]
}
所以这个“模糊”是由一个小的 previewSize 使用这种getSupportedPreviewSizes()
方法计算相机的最佳尺寸引起的
如果需要,我将保留下面的autoFocus
代码段,尽管删除,FYR。
好吧,我得到了解决这个“模糊”问题的方法,而我的案例只是使用TextureView
并surfaceTexture
拍照而不是旧surfaceView
的surfaceHolder
方式。
关键是设置这个 mCamera.autofocus()
,为什么图片“模糊”是因为我们缺乏这个自动对焦设置。如下所示:
mCamera.setPreviewTexture(surface);
//enable autoFocus if moving
mCamera.setAutoFocusMoveCallback(new AutoFocusMoveCallback() {
@Override
public void onAutoFocusMoving(boolean start, Camera camera) {
if (start) { //true means you are moving the camera
mCamera.autoFocus(myAutoFocus);
}
}
});
mCamera.startPreview();
autoFocusCallback
像这样:
AutoFocusCallback myAutoFocus = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
}
};