使用Xfermode修改图片显示样式

项目上 要显示 圆形头像 所以查阅了相关处理的办法,最后遮罩的办法实现如下的效果。


	public static Bitmap getRoundIcon(Bitmap bitmap, int pixels) {

		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() / 2,
				bitmap.getHeight() / 2);
		final Rect rect1 = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

		paint.setAntiAlias(true);
		canvas.drawARGB(0, 0, 0, 0);
		paint.setColor(color);
		//下层图片
		canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,
				bitmap.getWidth() / 4, paint);

		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
		//上层图片
		canvas.drawBitmap(bitmap, rect1, rect1, paint);

		return output;
	}

主要使用:PorterDuffXfermode是Xfermode的子类,提供了多种转换模式,来控制Paint与已有的Canvas图像进行交互。

API demo上的Xfermode 16种效果图

Src:及显示后面绘制的图片(上层图片)

Dst:前面绘制的图片(下层图片)

 

1.PorterDuff.Mode.CLEAR

   所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC

   显示上层绘制图片
3.PorterDuff.Mode.DST

  显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER

  正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER

  上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN

   取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN

  取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT

 取上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT

 取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP

 取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP

  取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR

  取上下层非交集部分

//红色部分均与透明度有关,所以要用Bitmap.config.ARGB的值
13.PorterDuff.Mode.DARKEN

 上下层全部显示,交集部分深色处理
14.PorterDuff.Mode.LIGHTEN

 上下层全部显示,交集部分浅色处理
15.PorterDuff.Mode.MULTIPLY

 取上下层交集部分深色处理
16.PorterDuff.Mode.SCREEN

上下层全部显示,交集部分浅色处理

***********//后续再研究

AvoidXfermode  PixelXorXfermode 

***********

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值