使用Android Paint类中的PorterDuffXfermode改变位图的明暗强度

3

好的,我的原始问题已经改变。我如何改变类似这样的东西受影响的强度?

    DayToNight.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

在我的梦想世界里,它应该是这样运行的:
    DayToNight.setXfermode(new PorterDuffXfermode(Mode.DST_IN(10)));

“10”在此指强度级别。


举个例子,如果我有一只闪烁的蜡烛,当蜡烛燃烧时我希望屏幕上所绘制的位图保留其原始的颜色和亮度,当它闪烁时我希望位图几乎变成黑色,并且随着光线变暗,我希望使位图变暗。

我已经想出了方程、计时器等所有的内容,但不知道如何应用它来改变颜色/亮度。也许烧掉图像是我需要的?我只想改变亮度。

我觉得使用paint.setShader可能是一个解决方案,但是这个领域的信息非常有限,根据我的搜索结果。任何帮助都将不胜感激。

编辑:为了清晰明了,我正在寻找一种在绘制到画布时使位图变亮/变暗的方法。


即使在这里可能有一些内容Paint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN));即便如此,我应该如何改变明亮度/暗度的值 - WIllJBD
真是太神奇了,我搜索了几个小时什么都没找到,现在我开始搞明白了...感谢那些发布各种示例的好人。http://vollnixx.wordpress.com/2012/06/06/android-porterduffxfermode-examples/ - WIllJBD
你如何调整暗度强度? - MetaSnarf
2个回答

9
这两种方法可能会解决你的问题:
  1. 在位图后面放置一个黑色矩形,并设置位图的不透明度。

  2. 绘制位图时,在画笔上使用ColorFilter。为了使位图变暗,可以使用半透明黑色。


11
paint = new Paint(); ColorFilter filter = new LightingColorFilter(0xFF222222, 0x00000000); paint.setColorFilter(filter); - WIllJBD
如果您的位图具有某些透明区域,则使用简单的矩形不起作用,因为您将在其下面看到它。相反,您可以同时使用两种方法,首先使用LightingColorFilter(0xFF000000,0x00000000)绘制位图,然后正常绘制相同的位图。 - serine
WIllJBD提到的方法非常好,完美地运作,你甚至可以调整暗度级别。 - Soham
1
@Soham如何调整暗通道? - MetaSnarf
@MetaSnarf,你找到答案了吗? - Hamza Khan

0

嘿,我用了一种技巧来去掉黑线。在我的橡皮擦按钮上,我将颜色设置为白色,而不是使用 XferMode。它有效果并且看起来不错。

if(erase){
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接