1

画像を円形にする必要があるアプリケーションがあります。元の画像は正方形または長方形です。この画像はサーバーからのものです。この画像を取得し、円形にする必要がある 7 つの画像の画像ビューに設定します。

画像の読み込みにはUniversal Image Loaderを使用しました。

これは私の画像を丸める方法です。

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = pixels;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
} 

だからonLoadingComplete()UniversalImageLoaderの中で、私はこれをやったimageView.setImageBitMap(getRoundedCornerBitmap(bitmap, pixel))

それは正常に動作しますが、時々私はOutofMemoryError. Android-Universal-Image-Loader (github)で見つけました。

Avoid using RoundedBitmapDisplayer. It creates new Bitmap object with ARGB_8888 config for displaying during work.

OutOfMemoryError に苦しむことなく画像の丸めを実装する別の方法はありますか?

どんな助けでも大歓迎です。

[UPDATE] : これが ImageLoader の構成方法です。

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).denyCacheImageMultipleSizesInMemory()
                .memoryCache(new WeakMemoryCache())
                .discCache(new UnlimitedDiscCache(cacheDir))
                .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .defaultDisplayImageOptions(
                        new DisplayImageOptions.Builder()
                                .showStubImage(R.drawable.default_user)
                                .resetViewBeforeLoading()
                                .cacheOnDisc()
                                .bitmapConfig(Bitmap.Config.RGB_565)
                                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                                .build())
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                .imageDownloader(new HttpClientImageDownloader(context, new DefaultHttpClient(manager, params)))
                .threadPoolSize(2)
                .build();

        // Initialize ImageLoader with created configuration.
        imageLoader.init(config);
4

0 に答える 0