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) {
}
}
結果:
私は正方形を持っていますが、プレビューは長方形です。