1. ホーム
  2. アンドロイド

[解決済み】Androidで大きなビットマップファイルを拡大縮小して出力する。

2022-04-07 19:07:18

質問

あるファイルに大きなビットマップ(例えば3888x2592)が入っています。今、そのビットマップを800x533にリサイズして、別のファイルに保存したいのですが、どうすればいいですか? 通常、ビットマップのサイズを変更するために Bitmap.createBitmap メソッドが必要ですが、これは第一引数にソースビットマップが必要で、元画像をビットマップオブジェクトにロードすると当然ながらメモリを超えるので用意できません ( ここで など)。

また、例えばでビットマップを読めない。 BitmapFactory.decodeFile(file, options) を提供することで BitmapFactory.Options.inSampleSize というのも、正確な幅と高さにリサイズしたいからです。使用方法 inSampleSize を使うと、ビットマップは972x648にリサイズされます(もし私が inSampleSize=4 を使用した場合)または 778x518 になります。 inSampleSize=5 2の累乗ですらない)。

また、inSampleSizeを使って、例えば、1段階目で972x648で画像を読み込んで、2段階目で800x533ちょうどにリサイズするのは、元画像を直接リサイズするのに比べて品質が悪くなるので避けたいですね。

私の質問をまとめると 10MP以上の大きな画像ファイルを読み込んで、特定の新しい幅と高さにリサイズして、OutOfMemory例外を発生させずに、新しい画像ファイルに保存する方法はありますか?

また、試しに BitmapFactory.decodeFile(file, options) で、Options.outHeightとOptions.outWidthの値を手動で800と533に設定しましたが、そのようにうまくいきません。

どうすればいいですか?

いいえ。 どなたかに訂正していただきたいのですが、あなたが試したロード/リサイズ方式は妥協案として認めました。

以下、閲覧している人のために手順を説明します。

  1. 可能な限りの最大値を計算する inSampleSize の場合、目標値よりも大きな画像を得ることができます。
  2. を使用して画像を読み込みます。 BitmapFactory.decodeFile(file, options) オプションとして inSampleSize を渡します。
  3. を使用して、必要な寸法にリサイズします。 Bitmap.createScaledBitmap() .