4

私はJavaとAndroidの開発が初めてです。frameLayout ウィンドウでカメラ ビューを使用してアプリケーションを開発しています。私のアプリケーションは縦向きになるように設計されていますが、ウィンドウは <図に示すように> 横向きです。おなじみのように、デフォルトのカメラ ビューは横向きなので、 camera.setDisplayOrientation (90);を実行します。 回転させます。

私の問題は、横長のウィンドウの下で縦長のビューで画像を回転させると、画像が歪む (ピンチ) ことです。この問題を解決するのを手伝ってくれる人はいますか?必要な比率を達成するために境界線をトリミングする解決策を教えてもらえますか?

!Im は 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