几种常见的图片特效

一、带倒影的图片
  就是图片在上,下面带了倒影,像在水里一样!其实原理就是绘制垂直对称图像,然后用透明度来渲染,搞定!
  代码如下:

 1     public Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
 2         final int reflectionGap = 4;
 3         int w = bitmap.getWidth();
 4         int h = bitmap.getHeight();
 5         // 建立倒影矩阵
 6         matrix.preScale(1, -1);
 7         // 生成一半倒影图片和整体bitmap
 8         Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w, h / 2, matrix, false);
 9         // 宽度是w,高度是h加上h的一半
10         Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2), Config.ARGB_8888);
11 
12         Canvas canvas = new Canvas(bitmapWithReflection);
13         canvas.drawBitmap(bitmap, 0, 0, null);
14         // Paint deafalutPaint = new Paint();
15         // canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);
16         canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);
17 
18         Paint paint = new Paint();
19         // 设置渲染,线性渲染,起点(0, h),终点(0, h + h / 2 + 4),起点颜色和终点颜色只有对比度不同,模式为TileMode.CLAMP
20         LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
21                 bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
22                 0x00ffffff, TileMode.CLAMP);
23         paint.setShader(shader);
24         // Set the Transfer mode to be porter duff and destination in
25         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
26         // Draw a rectangle using the paint with our linear gradient
27         canvas.drawRect(0, h, w, bitmapWithReflection.getHeight() + reflectionGap, paint);
28 
29         return bitmapWithReflection;
30     }

二、获得圆角图片
  就是类似苹果图标那样,四个角是圆的,其实原理是:绘制一个矩形框,抗锯齿,平滑,画圆角矩形,然后把图片画上去,搞定!
  

 1     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){   
 2             
 3         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);   
 4         Canvas canvas = new Canvas(output);   
 5      
 6         final int color = 0xff424242;   
 7         final Paint paint = new Paint();   
 8         final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());   
 9         final RectF rectF = new RectF(rect);   
10      
11         paint.setAntiAlias(true);   
12         canvas.drawARGB(0, 0, 0, 0);   
13         paint.setColor(color);   
14         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);   
15      
16         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));   
17         canvas.drawBitmap(bitmap, rect, rect, paint);   
18      
19         return output;   
20     }  

转载于:https://www.cnblogs.com/vtianyun/archive/2012/06/19/2555372.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值