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データの画像をコールバックとして返す