私はカメラのプレビュー機能を持つカメラアプリを持っています。このアプリケーションは数年前に開発され(2012年)、コードの一部を再利用することにしましたが、同じハードウェアi9100(別のOS 4.4 vs 3.0)で再度テストすると、カメラのプレビュー画像に問題が発生しますAndroidアプリのカメラのプレビューが機能しなくなりました(非推奨の `setType`メソッドを使用)
私は携帯電話を移動すると、私は画像の変化を参照して、それは明るく暗いパターン(したがって、アプリはカメラと通信している)に応答します。
これは(それがsetType
非推奨メソッドを使用しています)私のコードです:
class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "TGCamera";
SurfaceHolder mHolder;
public Camera camera;
public final String fileName = "/download/CameraGPS/zdelTempPhotoPreview.jpg";
CameraPreview(Context context) {
super(context);
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
camera = Camera.open();
Parameters parameter02 = camera.getParameters();
parameter02.setJpegThumbnailSize(80, 60);
parameter02.setPictureSize(640, 480);
camera.setParameters(parameter02);
try {
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);
Parameters parameters00 = camera.getParameters();
//parameters00.setRotation(90);
//parameters00.setFlashMode("on");
//parameters00.setJpegQuality(20);
camera.setParameters(parameters00);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
CameraPreview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
camera.stopPreview();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
//camera.getParameters().setRotation();
//camera.getParameters().setJpegQuality(20);
//camera.getParameters().setPictureSize(width, height)
Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Log.w(TAG,"clicked in preview");
Paint p = new Paint(Color.RED);
Log.d(TAG, "draw");
canvas.drawText("PREVIEW", canvas.getWidth()/2,
canvas.getHeight()/2, p);
}
任意の提案ですか?
画像サイズとプレビューサイズを任意の値に設定することはできません。それぞれgetSupportedPictureSizes()とgetSupportedPreviewSizes()によって返されるリストを確認してください。多くの場合(Samsung Galaxy S2に該当するかどうかはわかりませんが)、画像のアスペクト比とプレビューのアスペクト比が異なると、カメラが正しく動作しません。さらに、あなたはプレビューサーフェス上に描画することは想定されておらず、間違いなくonPreviewFrame()コールバックからではありません。 –
回答として回答してください。あなたはIT @AlexCohnを釘付けにしました! –