文書化Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
方法によると:
オプションの行列によって変換された、ソースビットマップのサブセットから不変のビットマップを返します。新しいビットマップは、ソースと同じオブジェクトであるか、コピーが作成されている可能性があります。元のビットマップと同じ密度で初期化されます。ソースビットマップが不変であり、要求されたサブセットがソースビットマップ自体と同じである場合、ソースビットマップが返され、新しいビットマップは作成されません。
既存のビットマップに方向を適用するメソッドがあります。
private Bitmap getOrientedPhoto(Bitmap bitmap, int orientation) {
int rotate = 0;
switch (orientation) {
case ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ORIENTATION_ROTATE_90:
rotate = 90;
break;
default:
return bitmap;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix mtx = new Matrix();
mtx.postRotate(rotate);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
私はここからそれを呼んでいます:
Bitmap tmpPhoto = BitmapFactory.decodeFile(inputPhotoFile.getAbsolutePath(), tmpOpts);
Bitmap orientedPhoto = getOrientedPhoto(tmpPhoto, orientation);
tmpPhoto
不変であることを確認しましたgetOrientedPhoto()
が、tmpPhotoのコピーである可変画像を返します。Bitmap.createBitmap()
新しいビットマップオブジェクトを作成せずに使用する方法と、私のコードの何が問題になっているのかを知っている人はいますか?