SurfaceHolder.Callback と Camera.PictureCallback を使用してアクティビティでカメラを開きます。画像を撮影した後、その画像をトリミングして SD カードに保存します。インテント カメラを介してトリミングするための多くの解決策を見つけましたが、私の要件による解決策は見つかりませんでした。
誰かが私を助けてくれたら、私は感謝します。
前もって感謝します。
Camera.PictureCallback の代わりに Camera.PreviewCallback を実装する必要があります。
インターフェース実装メソッドを使用して:
public void onPreviewFrame(byte[] data, Camera camera) {
if (shutterEnabled){
shutterEnabled = false;
// Process data
// Put it on a Bitmap
// Send it to cropImage
// -----
}
}
カメラのパラメータを setPreviewFormat に設定しなかった場合、viewPreviewFrame の画像は YUV (NV21) 形式で到着することに注意してください。実際に私はこの部品を作る方法を探しています。これがあなたの質問にぶつかった理由です。
ここでのポイントは、どのように画像をクロップメソッドに渡すのか、それを調べる必要があります。
ShutterEnabled フラグ。そのイベントを「監視」するリスナーから有効になります。
private void cropImage( picture){
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(picture, "image/*");
cropIntent.putExtra("aspectX",0);
cropIntent.putExtra("aspectY",0);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, CAMERA_CROP_CODE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (resultCode == RESULT_OK && requestCode == CAMERA_CROP_CODE){
Bitmap bmp = (Bitmap)data.getExtras().get("data");
}
}