首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -相机预览是横向的

Android -相机预览是横向的
EN

Stack Overflow用户
提问于 2010-10-02 00:24:18
回答 8查看 99.3K关注 0票数 125

我正在使用预览功能在屏幕上显示摄像机所看到的内容。

我可以让一切正常工作,曲面创建,曲面设置和曲面显示。

但是,在纵向模式下,它总是以不正确的90度角度显示图片。

如图所示:

我知道使用下面的代码会让事情变得更清楚:

代码语言:javascript
复制
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但是,我在一个包含其他元素的活动中有预览,并且我的活动以横向模式显示是没有意义的。(默认情况下禁用)

所以我想知道有没有什么方法可以改变预览的方向呢?并让我的其余活动在纵向模式下正确显示?

还是旋转预览以使其正确显示?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-25 04:59:39

这个问题一开始似乎是某个硬件see here的错误,但可以通过使用API8中提供的对mCamera.setDisplayOrientation(degrees)的调用来克服。所以我是这样实现它的:

代码语言:javascript
复制
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度,它似乎无法正确补偿它。

注:注意在适当的旋转中宽度和高度的互换。

票数 147
EN

Stack Overflow用户

发布于 2013-09-30 23:12:27

尝试设置显示方向。它解决了我的问题。

代码语言:javascript
复制
 mCamera.setDisplayOrientation(90);
票数 16
EN

Stack Overflow用户

发布于 2013-01-24 18:15:03

代码语言:javascript
复制
 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();
     }
}

试试这段代码

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3841122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档