package com.buddycloud.utils; import java.io.File; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import com.buddycloud.http.BuddycloudHTTPHelper; import com.buddycloud.log.Logger; import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.download.HttpClientImageDownloader; import com.nostra13.universalimageloader.core.process.BitmapProcessor; public class ImageHelper { private static final String TAG = ImageHelper.class.getName(); private static final String UIL_CACHE = "uil"; public static void configUIL(Context context) { File cacheDir = new File(context.getExternalCacheDir(), UIL_CACHE); DisplayImageOptions defaultOptions = defaultImageOptions(); HttpClientImageDownloader downloader = new HttpClientImageDownloader(context, BuddycloudHTTPHelper.createHttpClient(context)); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .discCache(new TotalSizeLimitedDiscCache(cacheDir, 50 * 1024 * 1024)) .imageDownloader(downloader) .defaultDisplayImageOptions(defaultOptions) .writeDebugLogs() .build(); ImageLoader.getInstance().init(config); } public static DisplayImageOptions defaultImageOptions() { DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisc(true) .build(); return defaultOptions; } public static BitmapProcessor createRoundProcessor(final int roundPixels, final boolean squareEnd, final int targetW) { return new BitmapProcessor() { @Override public Bitmap process(Bitmap arg0) { Bitmap newBitmap = getRoundedCornerBitmap(arg0, roundPixels, squareEnd, targetW); return newBitmap; } }; } public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels, boolean squareEnd, int targetW) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); if (targetW != -1) { double ratio = (double) h / (double) w; w = targetW; h = (int) (targetW * ratio); } Logger.debug(TAG, "Scale w: " + w + ", h: " + h); bitmap = Bitmap.createScaledBitmap(bitmap, w, h, false); Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, w, h); 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); if (squareEnd) { canvas.drawRect(0, h/2, w/2, h, paint); canvas.drawRect(w/2, h/2, w, h, paint); } paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } }