Androidで画像を切り取る方法。
参考iOSと比べて面倒。
BitmapRegionDecoderというクラスを使う。
このクラスは、コンストラクタにFileインスタンスを渡して作成する。
decodeRegion()というメソッドにRectを渡すと、その範囲を切り取ったBitmapインスタンスを返す。
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Rect;
public Bitmap clip(String originFilePath, Rect rect)
{
FileInputStream inputStream = new FileInputStream(new File(originFilePath));
BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(inputStream, true);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
return decoder.decodeRegion(rect, options);
}
単にファイルからビットマップを作りたいときは
// filePath ... ファイルパス
File file = new File(filePath);
FileInputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
となる。
デコードに失敗するとnullが返ることになる。
ちなみに、アセット内の画像ファイルからビットマップを読み込む方法は
// fileName ... アセット内のファイル名
AssetManager assetManager = getResources().getAssets(); //getResources()はContextのメンバ関数。ActivityはContextなので、Activity内ならそのまま使える
InputStream inputStream = assetManager.open(fileName);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
となる。
逆に、ビットマップをファイルに書き出すときは
// filePath ... 書き出すファイル名
// bitmap ... 書き出したい画像データ
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
bitmap.compress(CompressFormat.PNG, 80, fileOutputStream);
とする。bitmapの中身がfileに書き出される。
PR