我正在使用预览功能在屏幕上显示摄像机所看到的内容。
我可以让一切正常工作,曲面创建,曲面设置和曲面显示。
但是,在纵向模式下,它总是以不正确的90度角度显示图片。
如图所示:
我知道使用下面的代码会让事情变得更清楚:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但是,我在一个包含其他元素的活动中有预览,并且我的活动以横向模式显示是没有意义的。(默认情况下禁用)
所以我想知道有没有什么方法可以改变预览的方向呢?并让我的其余活动在纵向模式下正确显示?
还是旋转预览以使其正确显示?
发布于 2011-02-25 04:59:39
这个问题一开始似乎是某个硬件see here的错误,但可以通过使用API8中提供的对mCamera.setDisplayOrientation(degrees)的调用来克服。所以我是这样实现它的:
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Parameters parameters = mCamera.getParameters();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.setParameters(parameters);
previewCamera();
}
And the previewCamera method :
public void previewCamera() {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
isPreviewRunning = true;
} catch(Exception e) {
Log.d(APP_CLASS, "Cannot start preview", e);
}
}
这是基于HTC的需求,我必须在每次旋转检查中输入日志语句,以说明旋转是什么,然后在设备上进行调试,并在旋转设备时观察logCat输出。对于HTC的渴望,0是你所期望的手机(纵向),90度是逆时针旋转手机90度(我曾假设它应该是顺时针方向)。在代码中,你会看到,当手机处于90度或180度时,我不需要做任何显示旋转--设备似乎可以自己处理这个问题。只有一点不能正常工作: 270度旋转是当你将设备顺时针旋转90度时,显示器旋转计数器正常,但如果你逆时针旋转设备270度,它似乎无法正确补偿它。
注:注意在适当的旋转中宽度和高度的互换。
发布于 2013-09-30 23:12:27
尝试设置显示方向。它解决了我的问题。
mCamera.setDisplayOrientation(90);
发布于 2013-01-24 18:15:03
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
try {
mCamera.setPreviewDisplay(holder);
mCamera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
试试这段代码
https://stackoverflow.com/questions/3841122
复制相似问题