首页 > 安全资讯 >

Android图像处理(类型转换,比例缩放,倒影,圆角)

11-09-15

Java代码/*** 1.放大缩小图片** @param bitmap* @param w* @param h* @return*/public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) { int width = bitmap.getWidth(); int h...

Java代码 
/**
 * 1.放大缩小图片
 * 
 * @param bitmap
 * @param w
 * @param h
 * @return
 */ 
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; 

 
/**
 * 2.获得圆角图片的方法
 * 
 * @param bitmap
 * @param roundPx
 * @return
 */ 
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; 

 
/**
 * 3.获得带倒影的图片方法
 * 
 * @param bitmap
 * @return
 */ 
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; 

 
/**
 * 4.将Drawable转化为Bitmap
 * 
 * @param drawable
 * @return
 */ 
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; 

作者“xSTARx”
 

相关文章
最新文章
热点推荐