天天看点

Android中几种图像特效处理的集锦

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 createReflectionImageWit hOrigin(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;   

      }