1

Android のカメラ API に大きな問題があります。SurfaceView のカメラでプレビューを開始したいと考えています。それはうまくいきます。しかし、プレビュー画像は歪んでいます。なぜそれが起こり、解決策は何ですか?

App Store に Retro Camera のようなアプリがあります。たとえば、カメラのプレビューを長方形または正方形にしたいのです。しかし、プレビューには適切な解決策がありません。

私のコード:

public class CameraActivity extends Activity implements SurfaceHolder.Callback {

Camera camera;

SurfaceView surfaceView;

SurfaceHolder surfaceHolder;

boolean previewing = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageView buttonStartCameraPreview = (ImageView)findViewById(R.id.scanning);
    ImageView buttonStopCameraPreview = (ImageView)findViewById(R.id.buttonBack);

    getWindow().setFormat(PixelFormat.UNKNOWN);
    surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(this);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    buttonStartCameraPreview.setOnClickListener(
            new Button.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(!previewing) {
                        camera = Camera.open();
                        if(camera != null) {
                            try {
                                camera.setDisplayOrientation(90);
                                camera.setPreviewDisplay(surfaceHolder);
                                camera.startPreview();
                                previewing = true;
                            }
                            catch(IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
    );

    buttonStopCameraPreview.setOnClickListener(
            new Button.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(camera != null && previewing) {
                        camera.stopPreview();
                        camera.release();
                        camera = null;

                        previewing = false;
                    }
                }
            }
    );
}


@Override
public void surfaceChanged(
        SurfaceHolder holder, int format, int width, int height) {
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
 }

結果:
私は正方形を持っていますが、プレビューは長方形です。

4

1 に答える 1