我有一个应用程序,要求我的图像是圆形的。原始图片 是正方形或矩形。此图像来自服务器。 我检索这些图像,然后在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;
}
所以在UniversalImageLoader的onLoadingComplete()
中,
我这样做了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?
非常感谢任何帮助。
[更新]:这是我配置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);