package com.bosi.chineseclass.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
public class BubbleImageHelper {
private Context context = null;
private static BubbleImageHelper instance = null;
public static synchronized BubbleImageHelper getInstance(Context c) {
if (null == instance) {
instance = new BubbleImageHelper(c);
}
return instance;
}
private BubbleImageHelper(Context c) {
context = c;
}
private Bitmap getScaleImage(Bitmap bitmap, float width, float height) {
if (null == bitmap || width < 0.0f || height < 0.0f) {
return null;
}
Matrix matrix = new Matrix();
float scaleWidth = width / bitmap.getWidth();
float scaleHeight = height / bitmap.getHeight();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
return resizeBmp;
}
public Bitmap getBubbleImageBitmap(Bitmap srcBitmap,
int backgroundResourceID) {
if (null == srcBitmap) {
return null;
}
Bitmap background = null;
background = BitmapFactory.decodeResource(context.getResources(),
backgroundResourceID);
if (null == background) {
return null;
}
Bitmap mask = null;
Bitmap newBitmap = null;
mask = srcBitmap;
Config config = background.getConfig();
if (null == config) {
config = Bitmap.Config.ARGB_8888;
}
newBitmap = Bitmap.createBitmap(background.getWidth(),
background.getHeight(), config);
Canvas newCanvas = new Canvas(newBitmap);
newCanvas.drawBitmap(background, 0, 0, null);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
int left = 0;
int top = 0;
int right = mask.getWidth();
int bottom = mask.getHeight();
if (mask.getWidth() > background.getWidth()) {
left = (mask.getWidth() - background.getWidth()) / 2;
right = mask.getWidth() - left;
}
if (mask.getHeight() > background.getHeight()) {
top = (mask.getHeight() - background.getHeight()) / 2;
bottom = mask.getHeight() - top;
}
newCanvas.drawBitmap(mask, new Rect(left, top, right, bottom),
new Rect(0, 0, background.getWidth(), background.getHeight()),
paint);
return newBitmap;
}
}