图像特效处理

来源:互联网 发布:湖南飘香食品淘宝 编辑:程序博客网 时间:2024/06/05 16:18

//放大缩小图片
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;
}

 

  

       //获取壁纸返回值是Drawable
       Drawable drawable = getWallpaper();
       //将Drawable转化为Bitmap  
       Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
       //缩放图片
       Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);
       //获取圆角图片
       Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);
       //获取倒影图片
       Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
       //这里可以让Bitmap再转化为Drawable
        Drawable roundDrawable = new BitmapDrawable(roundBitmap);  
        Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);  
原创粉丝点击