为了账号安全,请及时绑定邮箱和手机立即绑定

android-摄像机预览是横向的。

android-摄像机预览是横向的。

智慧大石 2019-07-22 16:43:43
android-摄像机预览是横向的。我使用预览来显示相机在屏幕上看到的内容。我可以让所有的工作精细,表面创建,表面集和表面显示。然而,在纵向模式下,它总是以不正确的90度角显示图片。我知道,使用以下代码可以使图片变得清晰:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);但是,我在一个包含其他元素的活动中有预览视图,我的活动在景观模式下显示是没有意义的。(默认情况下是禁用的)所以我想知道有没有改变预览的方向?让我剩下的活动正确地显示在肖像模式下?还是要旋转预览以使其正确显示?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

这个问题似乎是从某些硬件的缺陷开始的。看这里但是,可以通过调用API 8中可用的mCamera.setDisplayOriation(DIED)来克服这一问题。

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输出。对于宏达电的愿望,0是手机,如你所期望的(肖像),90度是逆时针转动手机90度(我原以为它会顺时针方向)。在代码中,您将看到,我不需要做任何显示旋转时,手机是在90或180度-设备似乎处理这一点本身。只有一个点不能正常工作:270度旋转是当你把设备顺时针旋转90度,显示旋转计数器正常,但如果你逆时针旋转270度,它似乎没有适当地补偿它。

注意在适当的旋转中宽度和高度的偏移。


查看完整回答
反对 回复 2019-07-22
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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

 mCamera.setDisplayOrientation(90);


查看完整回答
反对 回复 2019-07-22
?
ITMISS

TA贡献1871条经验 获得超8个赞

 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();
     }}

试试这段代码


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 670 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信