package
com.android.tutor;
import
android.graphics.Bitmap;
import
android.graphics.Canvas;
import
android.graphics.LinearGradient;
import
android.graphics.Matrix;
import
android.graphics.Paint;
import
android.graphics.PixelFormat;
import
android.graphics.PorterDuffXfermode;
import
android.graphics.Rect;
import
android.graphics.RectF;
import
android.graphics.Bitmap.Config;
import
android.graphics.PorterDuff.Mode;
import
android.graphics.Shader.TileMode;
import
android.graphics.drawable.Drawable;
public class
ImageUtil {
//放大缩小图片
public
static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width =
bitmap.getWidth();
int height =
bitmap.getHeight();
Matrix
matrix = new Matrix();
float
scaleWidht = ((float)w / width);
float scaleHeight = ((float)h /
height);
matrix.postScale(scaleWidht,
scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0,
0, width, height, matrix, true);
return
newbmp;
}
//将Drawable转化为Bitmap
public
static Bitmap drawableToBitmap(Drawable drawable){
int width =
drawable.getIntrinsicWidth();
int height =
drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width,
height,
drawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888
:
Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
//获得圆角图片的方法
public
static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float
roundPx){
Bitmap
output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(),
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);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0,
0);
paint.setColor(color);
canvas.drawRoundRect(rectF,
roundPx, roundPx, paint);
paint.setXfermode(new
PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,
rect, rect, paint);
return
output;
}
//获得带倒影的图片方法
public
static Bitmap createReflectionImageWithOrigin(Bitmap
bitmap){
final int
reflectionGap = 4;
int width =
bitmap.getWidth();
int height =
bitmap.getHeight();
Matrix
matrix = new Matrix();
matrix.preScale(1,
-1);
Bitmap
reflectionImage =
Bitmap.createBitmap(bitmap,
0, height/2,
width, height/2, matrix, false);
Bitmap
bitmapWithReflection = Bitmap.createBitmap(width, (height +
height/2), Config.ARGB_8888);
Canvas
canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0,
0, null);
Paint
deafalutPaint = new Paint();
canvas.drawRect(0,
height,width,height + reflectionGap,
deafalutPaint);
canvas.drawBitmap(reflectionImage,
0, height + reflectionGap, null);
Paint paint
= new Paint();
LinearGradient shader = new
LinearGradient(0,
bitmap.getHeight(), 0,
bitmapWithReflection.getHeight()
+
reflectionGap, 0x70ffffff, 0x00ffffff,
TileMode.CLAMP);
paint.setShader(shader);
// Set the
Transfer mode to be porter duff and destination in
paint.setXfermode(new
PorterDuffXfermode(Mode.DST_IN));
// Draw a
rectangle using the paint with our linear gradient
canvas.drawRect(0, height,
width, bitmapWithReflection.getHeight()
+
reflectionGap, paint);
return
bitmapWithReflection;
}
}