2012-08-09 12 views
5

私はそこに多くの記事を読みましたか?しかし、私は正しく答えを見つけることはありません。 BitmapFactoryを使用せずに、メモリ不足の例外なしで "onPictureTaken"から画像をどのように回転させるか?

@Override 
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) { 
    try { 


     Bitmap bitmap = BitmapFactory.decodeByteArray(paramArrayOfByte, 0, 
     paramArrayOfByte.length); 

     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 

     FileOutputStream os = new ileOutputStream(Singleton.mPushFilePath); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 
     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, 
      height, matrix, false); 

     resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, os); 
     os.close(); 
     ... 

画像を回転させる方法はあります:

は、私が何かこれを行うみては?私は品質の損失なしで画像を回転したい!

+0

ここに良い解決策があります:http://stackoverflow.com/questions/2225363/c-sharp-rotate-bitmap-90-degrees – paul

+0

それは素晴らしいですが、それはC#ですか? –

+0

申し訳ありません - タグを読み取っていませんでした! – paul

答えて

4

Camera.setDisplayOrientationを使用して、すでに回転した写真を撮っている可能性がありますか? Android camera rotateを確認してください。さらに、Camera.Parameters.setRotation()を調べます。これらのテクニックの1つは、あなたのためのトリックを行う必要があります。

そうでなければ、Bitmap.compressでパラメータ95を使用する以外はコードは正常です。ロスレス圧縮には100を使用する必要があります。

メモリ不足の例外を回避するには、Camera.Parameters.setPictureSize()を使用して、より低い解像度のピクチャ(3Mpxなど)を使用します。つまり、本当に8Mpxの写真が必要ですか? Camera.Parameters.getSupportedPictureSizes()を使用して、デバイスでサポートされているサイズを確認してください。

+5

残念ながら、 'setDisplayOrientaion()'はプレビューにのみ適用され、 'onPicturetaken()'でキャプチャされたバッファには影響しません。実際のソリューションについては、http://stackoverflow.com/a/18447809/192373を参照してください。 –

+2

setRotationはonPictureTakenで受け取った実際の画像を回転させます。 – slott

関連する問題