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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}
});

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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へ権限を追記する

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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データの画像をコールバックとして返す

コメントを残す

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