7

ユニバーサル イメージ ローダー ライブラリ (1.8.3 バージョン) をアプリに正常に適用しました。グリッドビュー アイテムに表示する前にイメージのサイズを変更しようとしています (イメージが大きすぎてメモリにキャッシュできない場合があるため)。

ここに私がしようとしているものがあります:

...
BitmapFactory.Options resizeOptions = new BitmapFactory.Options();
resizeOptions.inSampleSize = 3; // decrease size 3 times
resizeOptions.inScaled = true;

options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.cacheInMemory()
.cacheOnDisc()
.decodingOptions(resizeOptions)
.build();
...

このコードは、何らかの理由で画像を 3 分の 1 に縮小しません。

誰かが正確に指定された密度で画像のサイズを変更するより良い方法を持っていますか?

4

3 に答える 3

22

Java ドキュメントを注意深く読んでください。

Options.inSampleSizeの着信オプションは考慮されません。ライブラリは、オプションに従って最適なサンプル サイズ自体を計算しimageScaleType(...)ます。

またImageSizeUtil.defineTargetSizeForView(ImageView imageView, int maxImageWidth, int maxImageHeight)、画像のターゲットサイズを定義するものも調べてください。

サイズは、ターゲット ビュー パラメーター、構成パラメーター、またはデバイスの表示サイズによって定義されます。サイズ計算アルゴリズム:

  1. ビューの実際の描画getWidth()を取得します。getHeight()ビューがまだ描画されていない場合は、ステップ 2 に進みます。
  2. と を取得layout_widthlayout_heightます。両方とも正確な値でない場合は、ステップ 3 に進みます。
  3. と を取得maxWidthmaxHeightます。両方とも設定されていない場合は、手順 4 に進みます。
  4. maxImageWidthパラメータ (maxImageWidthForMemoryCache) とパラメータ (maxImageHeightForMemoryCache) を取得しmaxImageHeightます。両方とも設定されていない (等しい 0) 場合は、手順 5 に進みます。
  5. デバイスの画面サイズを取得します。

imageScaleTypeUIL は、およびtargetSize(およびImageViewの scaleType)に従って、結果のビットマップ サイズを定義します。

于 2013-04-01T13:04:31.520 に答える
14

これを試してみてください:

options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.cacheInMemory()
.cacheOnDisc()
.decodingOptions(resizeOptions)
.postProcessor(new BitmapProcessor() {
    @Override
    public Bitmap process(Bitmap bmp) {
        return Bitmap.createScaledBitmap(bmp, 300, 300, false);
    }
})
.build();
于 2014-09-12T07:09:36.587 に答える