问题标签 [blending]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2218 浏览

c# - 如何在 .Net 中使用 32 位 alpha 混合 BMP

有没有办法在.Net(C#)中使用这种格式?我想使用 uTorrent 在我的应用程序中使用的相同皮肤格式,但我无法获得透明背景。有任何想法吗?谢谢你的时间。

0 投票
1 回答
1114 浏览

opengl - BlendFunc 用于具有变化背景的纹理字体

我正在尝试使用纹理字体,以便可以在我的 openGL 场景中显示文本。但是,我无法找到可行的 glBlendFunc 值。

将放置文本的背景是灰度图像,但在整个执行过程中会发生变化。因为背景发生了变化,所以文本可能位于从黑色到白色的任何颜色之上。

我发现的最佳值是 glBlendFunc(Gl.GL_SRC_COLOR, Gl.GL_ONE_MINUS_SRC_ALPHA)。这将使角色周围的黑框消失,但角色本身会随着背景变白而消失。

请帮忙!

0 投票
2 回答
7526 浏览

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

Surface.blit在 1.8 中有一个新参数:blend。定义了以下值:

  • BLEND_ADD
  • BLEND_SUB
  • BLEND_MULT
  • BLEND_MIN
  • BLEND_MAX
  • BLEND_RGBA_ADD
  • BLEND_RGBA_SUB
  • BLEND_RGBA_MULT
  • BLEND_RGBA_MIN
  • BLEND_RGBA_MAX
  • BLEND_RGB_ADD
  • BLEND_RGB_SUB
  • BLEND_RGB_MULT
  • BLEND_RGB_MIN
  • BLEND_RGB_MAX

有人可以解释这些模式的含义吗?

0 投票
5 回答
7703 浏览

c++ - 如何从OpenGL中的纹理中删除黑色背景

我正在寻找一种方法来删除 24 位位图的背景,同时保持主图像完全不透明,到目前为止,混合已经达到了目的,但现在我需要保持主要位不透明。我在谷歌上搜索过,但没有发现任何帮助,我想我可能正在搜索错误的术语,所以任何帮助将不胜感激。

编辑:是的,对不起,我现在使用黑色作为背景。

0 投票
7 回答
27813 浏览

algorithm - 是否有一种颜色混合算法可以像混合真实颜色一样工作?

RGB颜色的普通混合与绘画的混合颜色有很大的不同,它是光的混合而不是颜料的混合。

例如:

(应该是蓝色+黄色=绿色)

是否有任何已知的颜色混合算法可以像混合真实颜色一样工作?


我的方法

我已经尝试过以下操作:

将两种颜色转换为 HSV并混合色调(乘以从饱和度计算的系数),以及饱和度和值通道的简单平均值。然后我计算了两种颜色的平均亮度,并调整了生成的颜色以匹配这个亮度。这工作得很好,但色调混合有时是错误的,例如:

我发现有时我需要将色调值移动 360°(当色调之间的差异大于 180° 时)。

但是这种转变也不是很好,例如:

(Hue 179 + Red) 和 (Hue 181 + Red) 产生两种完全不同的颜色。


然后我尝试了 CIE Lab 色彩空间(如在 Photoshop 中),它旨在更接近人类感知颜色的方式。

我对每个对应的两个通道只使用了一个简单的平均值,但结果并不令人满意,例如,我从蓝色 (98, -16, 93) 和黄色 (30, 68,-112)。这些系数取自 Photoshop。

也许如果我使用一些不同于平均水平的操作,它可以工作,但我不知道是什么。


CMYK 也不起作用,结果就像在 RGB 或 LAB 中一样。


似乎在任何这些色彩空间中的微不足道的加色或减色混合都不会产生自然的结果。


工作实施

Krita – 绘画混音器

光栅图形编辑器 Krita 在某些时候实现了更逼真的颜色混合:http ://commit-digest.org/issues/2007-08-12/(Painterly 混合器插件)

他们说这是第一个使用描述颜料行为的 Kubelka 和 Munk 方程实现特殊技术的公共应用程序。

这是 Krita 混色的视频:https ://www.youtube.com/watch?v=lyLPZDVdQiQ

五十三的论文

在由FiftyThree开发的 iOS 版 Paper 应用程序中也有关于颜色混合的文章。他们描述了他们如何在该领域进行创新和实验,并提供混合蓝色和黄色的样本,从而产生绿色。然而,实际的过程或算法并没有真正描述在那里。

报价:

“在寻找一种好的混合算法时,我们最初尝试在各种颜色空间中进行插值:RGB、HSV 和 HSL,然后是 CieLAB 和 CieLUV。结果令人失望,”Chen 说。“我们知道红色和黄色应该产生橙色,或者红色和蓝色应该产生紫色——但无论你使用什么色彩空间,都没有办法得到这些颜色。有一个工程公理:做最简单的事情可能会奏效。好吧,我们现在已经尝试了最简单的方法,但他们甚至感觉都不对。”

似乎和 Krita 一样,Paper 实现了 Kubelka-Munk 模型:

[...] Kubelka-Munk 模型对每种颜色至少有六个值,包括每种 RGB 颜色的反射和吸收值。“虽然屏幕上颜色的外观可以用三个维度来描述,但颜色的混合实际上是在六维空间中发生的,”FiftyThree 的联合创始人兼首席执行官 Georg Petschnigg 解释道。Kubelka-Munk 的论文使团队能够将美学问题转化为数学框架。[...]

从所有这些信息来看,似乎基于 Kubelka-Munk 模型的实施可能是前进的方向,并提供更接近现实的结果。

尽管它看起来像一个复杂的过程,但我还没有看到太多关于如何实现这样的东西的好信息。


相关问题

这些问题是在这个问题之后发布的,都与同一件事有关。

他们都没有真正的答案。


其他相关链接和资源

0 投票
2 回答
1397 浏览

colors - 颜色插值

好的,所以我正在查看一个典型的颜色选择器,它看起来像这样:

图片

如果我们只处理高度饱和的颜色,混合模式的行为如下:

是否可以定义一个插值函数 f ,它取 0 到 1 之间的值并在该光谱上产生一种颜色(其中 0 和 1 对应于上面发布的光谱的左侧和右侧)?我只关心高度饱和的颜色(一个组件始终是 255。)。另外,我注意到这种模式从 R 到 G 再到 B 混合。但是,是否还有类似的功能可以混合青色、洋红色和黄色?虽然这是不正确的,但如果 f(0) 产生青色而 f(1) 产生黄色,那么 f(0.5) 会产生与混合两种颜料时可能达到的绿色相似。

我希望这是有道理的。请随时让我澄清任何事情。谢谢!

0 投票
2 回答
2308 浏览

iphone - OpenGL ES/iPhone 的透明度/混合问题

我有一个简单的 16x16 粒子,它从不透明变为透明。不幸的是,在我的 iPhone 端口中出现了不同,我看不出代码的差异在哪里。大部分代码基本相同。

我已将图片上传到此处以显示问题

左边的粒子是错误渲染的 iPhone 版本,右边是它在 Mac 和 Windows 上的显示方式。它只是一个简单的 RGBA .png 文件。

我尝试了许多混合函数和 glTexEnv 设置,但似乎无法使它们相同。

为了彻底,我在 iPhone 上的纹理加载代码如下所示

我使用的混合函数是 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我会尝试人们向我提出的任何想法,因为这对我来说有点神秘。

干杯。

0 投票
3 回答
1263 浏览

iphone - OpenGL ES。滚动 3 层星空纹理让我从 60 -> 40 FPS

我需要为 2D 空间滚动射击游戏绘制背景。我需要实现 3 层恒星:背景中的一层遥远的星云(移动非常缓慢),一层遥远的恒星(移动缓慢)和一层靠近的恒星(移动正常)在另外两层之上。

我第一次尝试的方法是使用 3 个 320 x 480 的纹理,它们是星星的透明 png。我使用了 GL_BLEND 和 SRC_ALPHA,ONE_MINUS_SRC_ALPHA。

即使在 3GS 上,结果也不是很好。在第一代设备上,FPS 下降到 40..50,所以我认为我这样做是错误的。

当我禁用 GL_BLEND 时,即使在第一代设备上一切正常,并且 FPS 再次回到 60 ......所以这一定是我试图融合大型透明纹理的事实。

问题是我不知道如何以其他方式做到这一点......

我是否应该只绘制第一个星云,比如不透明的纹理,然后尝试用小点在屏幕上移动来模拟中间和顶部的星层?

在混合问题上还有其他方法吗?如何加快渲染过程?一个大纹理(tileset)是答案吗?

请帮帮我,因为我被困在这里,我不能出去。

0 投票
1 回答
692 浏览

c# - 如何创建简单的 HLSL Silverlight 过滤器以混合/播放/混合 2 个图像?

如何创建简单的 HLSL Silverlight 过滤器以混合/播放/混合 2 个图像?

我需要一些过滤器的工作示例,它将作为输入 2 个图像\对象并返回 1 个图像 - 一些计算的结果。

我想引入 Silverlight 混合模式!)

0 投票
1 回答
650 浏览

iphone - 如何使用蒙版冲出我的图像?

我有一个蒙版(从 256 灰色 PNG 加载),我想将其应用于图像,该图像被用作绘制 a属性的过程的一部分。UITableViewCellimageView.image

当未选择/突出显示单元格时,我CGImageCreateWithMask使用正确颜色的正方形和蒙版,然后drawAtPoint:将其放入我正在构建的图像中。这工作正常。

However, when the cell is selected or highlighted, I'd like to instead use the mask to instead punch through my image appropriately. 也就是说,当我的蒙版指定完全不透明度时,我希望我正在构建的图像完全透明,以便通过它绘制 tableview 的背景。在我的蒙版指定 0 不透明度的地方,我希望 alpha 通道保持不变。除了受影响的 Alpha 通道,我什么都不想要。

我想我的意思是我想在 a 上绘制 clearColor UIImage,根据蒙版具有不同程度的不透明度。

首先,这叫什么?第二,我该怎么做?