エンジニアリング

Androidの画像トリミング機能が欲しくなったので書いてみた

トリミング

写真って良い感じにとれないですよね、いらないところは想い出もろとも消し去りたいですよね!
・・・・ということで画像トリミング機能の実装をチラッとやってみました

カメラで撮影

クリックリスナー実装して onClickにこんな感じで実装

[java]
//ActivityForResultの結果の分岐
//カメラ撮影
final int CAMERA_CAP = 1;
//トリミング
final int PIC_VAL = 2;

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//ここでカメラの撮影をしたあとにactivityの戻り先を明示(CAMERA_CAP)
startActivityForResult(intent, CAMERA_CAP);

[/java]

トリミング〜表示

startActivityForResultの結果で分岐する感じ、カメラ撮影→トリミング→後処理という感じで動いていく

[java]
/**
* 結果を受け取る
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (RESULT_OK == resultCode) {
Bitmap bitmap = null;
switch (requestCode) {
// カメラの結果を受け取る
case CAMERA_CAP:

URI bitmapUri = data.getData();

//Android標準のカメラアプリに渡して画像処理をする
Intent cropIntent = new Intent(“com.android.camera.action.CROP”);
cropIntent.setDataAndType(bitmapUri, “image/*”);
cropIntent.putExtra(“crop”, “true”);

//アスペクト比の指定(ここでは4:3にしている)
cropIntent.putExtra(“aspectX”, 4);
cropIntent.putExtra(“aspectY”, 3);

//保存サイズの表記
cropIntent.putExtra(“outputX”, 256);
cropIntent.putExtra(“outputY”, 181);

cropIntent.putExtra(“return-data”, true);

//トリミングした後の結果を渡す
startActivityForResult(cropIntent, PIC_VAL);

break;

case PIC_VAL :
Bundle extras = data.getExtras();
bitmap = extras.getParcelable(“data”);

//この後↓で画像の表示処理でもいれれば完成

break;

default:
break;
}
}
}

[/java]

出来た!

こんな感じになりました! 部屋キタない・・・・

android

最後に

他アプリに渡す形になるので実装が思ったより簡単だった!ほとんどの端末はこれで動くと思いますが、com.android.camera.action.CROP が無い稀有な端末だともちろん動きません!悪しからず・・・・・