Pygame中的混合模式是什么意思?

15

Surface.blit在1.8版本中新增了一个参数:混合(blend)。以下是定义的值:

  • BLEND_ADD(相加)
  • BLEND_SUB(相减)
  • BLEND_MULT(相乘)
  • BLEND_MIN(最小值)
  • BLEND_MAX(最大值)
  • BLEND_RGBA_ADD(RGBA相加)
  • BLEND_RGBA_SUB(RGBA相减)
  • BLEND_RGBA_MULT(RGBA相乘)
  • BLEND_RGBA_MIN(RGBA最小值)
  • BLEND_RGBA_MAX(RGBA最大值)
  • BLEND_RGB_ADD(RGB相加)
  • BLEND_RGB_SUB(RGB相减)
  • BLEND_RGB_MULT(RGB相乘)
  • BLEND_RGB_MIN(RGB最小值)
  • BLEND_RGB_MAX(RGB最大值)

请问这些模式代表什么意思?

2个回答

15

你可以在这里找到混合操作的源代码:surface.h

基本上,ADD将两个源像素相加并将结果剪切为255。SUB减去两个像素并剪切为0。

MULTresult = (p1 * p2) / 256

MIN:选择每个通道(而不是整个像素)中的较低值,因此如果pixel1是(100,10,0),而pixel2是(0,10,100),则产生的结果是(0,10,0)

MAX:与MIN相反(即(100,10,100)

还有一种不在文档中明确的额外混合模式:0(或者只是省略参数)。该模式将源表面“印”到目标表面中。如果源表面具有alpha通道,则这将决定每个像素的“强度”(0=没有影响,255=复制像素,128result = .5*source + .5*destination)。

有用的效果:要使某个区域变暗,请使用混合模式0,填充源/印花表面为黑色并将alpha设置为10(0,0,0,10)

要使其变亮,请使用白色(255,255,255,10)


MIN示例的结果不应该是(0, 10, 0)吗? - Aleksi Torhamo

2

这些是用于将图像叠加在彼此上面的混合模式。混合模式的名称已经告诉您底层操作。

BLEND_*常量只是BLEND_RGB_*常量的别名,而BLEND_RGBA_*变体作用于所有四个通道(包括alpha通道),而不仅仅是RGB。

有关不同混合模式及其各自效果的一般信息,请参见此处


谢谢你的回答。你能给一些提示,何时使用哪种混合类型吗? - Aaron Digulla
这完全取决于你想要实现什么。这可能有点违反直觉,但记住每种模式的作用可以告诉你哪种颜色产生哪种效果。您可以使用像GIMP或Paint.NET这样的图形软件来尝试混合模式,因为它们在图层上基本相同。 - Joey

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