我想创建一个画笔效果,当用户在屏幕上拖动他/她的手指时,画笔只会更改下面图像/位图的alpha。例如,如果画笔不透明度设置为50%,则应该应用画笔
也就是说,画笔应该只影响Alpha透明度而不是颜色。我从以下代码开始:
LPC_PINCON->PINSEL0 |= 0x2<<30; //SCK0, P0.15
LPC_PINCON->PINSEL1 |= 0x2<<2; //MISO0, P0.17
LPC_PINCON->PINSEL1 |= 0x2<<4; //MOSI0, P0.18
LPC_GPIO0->FIODIR |= (1<<16); //SSEL/CSN, P0.16
正如您所注意到的,这个画笔需要有填充颜色。这是想要避免的。我需要一个透明的刷子,但不需要颜色。
如果有另一种方法来实现该对象,那很好。
答案 0 :(得分:0)
设置绝对alpha值可能会涉及位图中的一些像素错误。
最接近您想要的Porter-Duff模式是DST_OUT,它将像橡皮擦一样。
尝试使用此代码,看看它是否接近:
drawPaint.setColor(Color.BLACK); // the color doesn't really matter
drawPaint.setAlpha(255 - alpha); // inverse of the alpha result you want
drawPaint.setXferMode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
这样做的目的是让每次在相同位置绘制时图像像素更亮更亮,这可能不是您想要的。在这种情况下,您必须变得更复杂,并将颜色+ alpha路径绘制到单独的位图上,然后使用PorterDuff.Mode.DST_OUT
在图像位图上绘制 位图。
不幸的是,你不能简单地实现一个能完全符合你想要的自定义ColorFilter
。所有这些图形操作都发生在原生空间,谷歌不希望我们只是凡人搞乱这些东西。