4

我是 java 和 android 开发的新手。我正在 frameLayout 窗口中开发一个带有相机视图的应用程序。我的应用程序设计为纵向,但窗口为横向<如图所示>。正如您所熟悉的那样,默认相机视图是横向的,所以我执行 camera.setDisplayOrientation (90); 旋转它。

我的问题是,当图像在横向窗口下以纵向视图旋转时,它会变形(捏合)。any1 可以帮我解决这个问题吗,any1 可以为我提供一个解决方案来修剪边界以达到所需的比例。

!我是stackoverflow的新用户,所以不允许上传图片,否则我可以告诉你。

     ___________________________________________
    |____________Notification bar_______________|
    |                                           |
    |   My Application                          |
    |___________________________________________|
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |         camera View                       |
    |          ____________________             |
    |         |                    |            |
    |         |                    |            |
    |         |                    |            |
    |         |                    |            |
    |         |                    |            |
    |         |____________________|            |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |                                           |
    |___________________________________________|

代码:

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
{
        if(preview_running){
        camera.stopPreview();
        preview_running = false;
    }

    Camera.Parameters parameters = camera.getParameters();

    List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
    int mFrameWidth =  width;
    int mFrameHeight = height;

   {
        double minDiff = Double.MAX_VALUE;
        for (Camera.Size size : sizes) 
        {
            if (Math.abs(size.height - height) < minDiff) 
            {
                mFrameWidth = size.width;
                mFrameHeight = size.height;
                minDiff = Math.abs(size.height - height);
            }
        }
    }
    if( (width*height) != 0){
        parameters.setPreviewSize(mFrameHeight, mFrameWidth);
        System.out.println("TEST 1");
    }

    camera.setDisplayOrientation(90);
    camera.setParameters(parameters);
    camera.startPreview();

    preview_running = true;
}
4

0 回答 0