Android圖像處理(類型轉換,比例縮放,倒影,圓角) – Android移動開發技術文章_手機開發 Android移動開發教學課程

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”
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。