在我的活动中,我在surfaceView上显示相机预览。它在Nexus One和HTC Desire上运行得非常好,但在三星Galaxy S上,我看到奇怪的线条,奇怪的比例和三次。请参阅下面的屏幕截图。
问题似乎与此类似: camera preview on android - strange lines on 1.5 version of sdk 但没有一个评论有帮助。我试图将高度,宽度换成相机参数,但差别不大。
(旁注:我的活动始终处于横向模式,已修复。我在清单中将其修复为screenOrientation参数,以防万一。)
我的SurfaceHolderCallback的代码(我的活动中的相关内部类):
class SurfaceHolderCallback implements SurfaceHolder.Callback {
private static final int IMAGE_WIDTH = 512;
private static final int IMAGE_HEIGHT = 384;
private static final String ORIENTATION = "orientation";
private static final String ROTATION = "rotation";
private static final String PORTRAIT = "portrait";
private static final String LANDSCAPE = "landscape";
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
//Surface.setOrientation(Display.DEFAULT_DISPLAY,Surface.ROTATION_90);
Parameters p = camera.getParameters();
p.setPictureSize(IMAGE_WIDTH, IMAGE_HEIGHT);
p.set(ORIENTATION, PORTRAIT);
p.set(ROTATION, 90);
// p.setPreviewSize(640, 480);
Camera.Size s = p.getSupportedPreviewSizes().get(0);
Log.d(APP, "preview params " + s.width +"/"+ s.height);
p.setPreviewSize( s.width,s.height );
p.setPictureFormat(PixelFormat.JPEG);
p.set("flash-mode", "auto");
camera.setParameters(p);
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (Throwable ignored) {
Log.e(APP, "set preview error.", ignored);
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (isPreviewRunning) {
camera.stopPreview();
}
try {
camera.startPreview();
} catch(Exception e) {
Log.d(APP, "Cannot start preview", e);
}
isPreviewRunning = true;
}
...
答案 0 :(得分:6)
我发现三星似乎有参数问题
p.set("orientation", "portrait");
p.set("rotation", 90);
取消注释后,看起来不错。我只需要手动旋转图像然后。
答案 1 :(得分:2)
我可能会说明显而易见的,但由于你的程序同时适用于Nexus和Desire,你的代码可能还不错。 Galaxy是一款新手机 - 问题可能是它自己的驱动程序中的错误,而不是你的代码。如果是这种情况,它可能是任何事情:您可能只需等待/希望补丁。