2

アプリからネイティブカメラアプリを開いて写真をキャプチャし、画面の背景画像として設定してから、ボタンをクリックして回転させたいだけです。3MP カメラで撮影した場合、写真は n 回回転します。カメラの解像度を 5MP 以上に設定すると、ボタンを 5 回クリックするとアプリが強制終了します (写真は 4 回回転します)。

Bitmap rotatedBitmap = null; 
int curAngle = 0; 

private Bitmap rotateImageBitmap(Bitmap capturedPhotoBitmap) {       

if(rotatedBitmap != null  ) 
{ 
    rotatedBitmap = null; 
} 

Matrix matrix = new Matrix(); 
curAngle = (curAngle + 90) % 360; 
matrix.postRotate(curAngle); 
rotatedBitmap =  Bitmap.createBitmap(capturedPhotoBitmap, 0, 0,  capturedPhotoBitmap.getWidth(),  capturedPhotoBitmap.getHeight(), matrix, true); 

return rotatedBitmap;         
 } 

これは開発者ガイドからのものです ....
1. 通常、モバイル デバイスはシステム リソースに制約があります。Android デバイスでは、1 つのアプリケーションで使用できるメモリはわずか 16 MB です。

2. ビットマップは、特に写真のような豊富な画像の場合、大量のメモリを消費します。たとえば、Galaxy Nexus のカメラは、最大 2592x1936 ピクセル (5 メガピクセル) の写真を撮影します。使用されるビットマップ構成が ARGB_8888 (Android 2.3 以降のデフォルト) である場合、このイメージをメモリにロードすると、約 19MB のメモリ (2592*1936*4 バイト) が必要になり、一部のデバイスではアプリごとの制限をすぐに使い果たします。

最近のほとんどの携帯電話には、8mp 以上のカメラが搭載されています。そのため写真が大きくなります。 カメラの解像度を気にせずに写真を何回も回転させるにはどうすればよいですか。圧縮する必要がありますか?最善の方法は何ですか?私を助けてください。

4

1 に答える 1

0

RAMのヒープに画像を配置するのではなく、アプリのキャッシュディレクトリのディスクに画像をロード(読み取り:バッファリング)します。http://developer.android.com/reference/android/content/Context.html#getCacheDir()

イメージがディスクに配置されたら、サンプルサイズを使用してイメージをメモリに拡張し、メモリ消費を削減します。

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSizeおよびhttp://developer.android.com/reference/android/graphics/BitmapFactory.htmlを参照してください

選択するサンプルサイズは、ビットマップのサイズ(ピクセル単位)と画像をロードするビューのサイズ(ピクセル単位)を基準にしています。

画像のサイズを見つけるには、BitmapFactory.Optionsオブジェクトの「inJustDecodeBounds」オプションを使用します。

選択するサンプルサイズは2の累乗である必要があることに注意してください。数値が大きいほど、節約できるメモリは多くなりますが、画像の品質は低下します。

サンプルサイズ2=1/4サイズ。サンプルサイズ4=1/16サイズなど。

于 2012-06-25T03:44:12.150 に答える