Androidの写真をアルバムへ保存

Androidの写真をアルバムへ保存

写真をアルバムへ保存するには
Cameraクラスの
takePicture()を使って写真を撮影し
これで得たbyte配列のデータをJPGへ変換して保存する

まずは、カメラプレビューの実装し
次に、写真を撮影

写真の撮影にはtakePicture()を使う

mSurfaceView.setOnTouchListener(new OnTouchListener(){

@Override
public boolean onTouch(View v, MotionEvent event){

if(event.getAction() == MotionEvent.ACTION_DOWN){

if(mCamera !=null){

//前回撮影した画像を保存できない場合
if(!mIsSave){
mCamera.takePicture(null,null, mPictureCallback);
mIsSave = true;
}
}
}
return true;
}
});

次に、画像の保存先の設定

String savePath = Environment.getExternalStorageDirectory().getPath() + "SAVE_PATH";

File file = new File(saveFile);

if(!file.exists()){
file.mkdir();
}

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");

String imgPath = savePath +"/"+ "IMG_"+sdFormat.format(cal.getTime())+".jpg";

ちなみに、microSDに保存するときには
権限が必要になるため
AndroidManifest.xmlへ権限を追記する

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

次に、設定した保存バスを元に
FileOutputStream の
write()で画像データを書き込む
書き込み後はギャラリーへ反映するため
ContentProviderの更新をする

try{
FileOutputStream fos = new FileOutputStream(imgPath, true);

fos.write(data);
fos.close();

//ContentProvider update
ContentValues values = new ContentValues();
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data",imgPath);

getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

}catch(Exception e){

}

takePicture()には
3つのコールバック、つまり行う挙動を指定できる

Camera.ShutterCallback
キャプチャした瞬間、コールバックを返す

Camera.PictureCallback
撮影したrawデータの画像をコールバックとして返す

Camera.PictureCallback
撮影したjpegデータの画像をコールバックとして返す

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です