画像をキャプチャしてビットマップに変換し、Rest サービスに投稿する Android アプリに取り組んでいます。
Bitmap の作成中に、BitmapFactory.Options.isSample Size の値を 4 に設定しました。これは、HTC One を除くすべてのデバイスで正常に機能します。HTC one の画像が歪んでいます。
値を 1 に変更すると、HTC 1 では適切な画像が表示されますが、メモリの問題により、他のすべてのデバイスではアプリケーションがクラッシュします。
この問題は、使用可能なヒープ サイズに関連しています。
- HTC one が HTC one で歪んだ画像を表示する理由は何ですか。
- 同じビルド バージョンの 16 でも S3 でアプリケーションがクラッシュするのはなぜですか。ヒープ サイズが利用できないためにクラッシュします。
- ドロイドのようなすべての下位バージョンの電話がサンプルサイズ4で正常に動作するのはなぜですか.
- アプリの利用可能なメモリ領域を確認し、BITMAP を操作するために利用可能なものを使用する最良の方法は何ですか。
マニフェスト ファイルで android:largeHeap を構成すると、これは機能しているように見えますが、信頼できるソリューションではないようです。
カメラ パラメーターを使用して撮影した写真のサイズを見つけ、ビットマップの最適なサンプル サイズにたどり着くことができました。以下のコードは問題を解決します。しかし、それは正しい方法ですか、それとも1と4を使用する代わりにサンプルサイズも計算する必要がありますか.
private Bitmap createImaegBitmap(byte[] data)
{
BitmapFactory.Options opt;
opt = new BitmapFactory.Options();
opt.inTempStorage = new byte[16 * 1024];
Parameters parameters = ((ReceiptCollection)getApplication()).getParams();
Size size = parameters.getPictureSize();
int height11 = size.height;
int width11 = size.width;
float mb = (width11 * height11) / 1024000;
if (mb > 4f)
opt.inSampleSize = 4;
else if (mb > 3f)
opt.inSampleSize = 1;
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,opt);
return bitmap;
}