2016-11-14 5 views
0

カメラから取得した各フレームをビットマップに変換して、ImageViewに表示していますが、imageViewに回転ビットマップが含まれているため、ビットマップを90度回転右。これを達成するために、私はこの問題を解決するために、いくつかの記事を参照し、そのうちの一つが使用される各ビットマップを再利用することが示唆 iは、ビットマップを90度回転させるために以下のコードを書きましたが、実行時に私はビットマップ回転でエラーが発生する

bitmap size exceeds 32bits 

を受け取りますしかし、それは問題を解決しませんでした。 なぜこのエラーが発生しているのか、どのように解決するのか教えてください。

コード

@Override 
protected void onProgressUpdate(Bitmap... values) { 
     super.onProgressUpdate(values); 

     Bitmap b = values[0]; 

     Matrix matrix = new Matrix(); 
     matrix.postScale(b.getWidth()-10, b.getHeight()-10); 
     matrix.postRotate(90); 

     Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), matrix, true); 

     mIVEdges.setImageBitmap(resizedBitmap); 

     b.recycle(); 
    } 
+0

あなたは本当に 'onProgressUpdate(画像を回転させる必要がある)'ない 'doInBackground()'で? - yes - が 'publishProgress()'の場合、頻繁に呼び出しが行われ、多くの新しい 'resizedBitmap'が作成されます。 –

答えて

0

あなたは100x100のピクセルのビットマップを持っている場合は、

matrix.postScale(b.getWidth()-10, b.getHeight()-10); 

が新しいビットマップが90スケールファクタでスケーリングされます。

matrix.postScale(90, 90); 

したがって、新しいビットマップの出力は9000x9000ピクセルです。

新しいビットマップのサイズを小さくしたい場合は、スケールファクタを使用したい> 0.0と< 1.0

matrix.postScale(0.9f, 0.9f); 
+0

ok '、matrix.postScale(1f、1f)と同じサイズのビットマップを維持したい場合はどうすればいいですか – user2121

+0

はい。同じビットマップサイズを維持するには、倍率1.0を使用する必要があります –

関連する問題