问题标签 [alphablending]

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 投票
1 回答
667 浏览

c# - 基本绘制方法 blenddstate 无法识别?

我很擅长编程,但是,我是 c# (xna) 的新手,我正在按照教程在屏幕上绘制精灵,并且在 draw 方法中使用如下方式时无法识别 blendstate 方法:

//不识别混合状态(在它下面放上波浪线)

提前谢谢,因为这肯定让我很困扰。

0 投票
1 回答
752 浏览

directx - 如何在 DX 9 中仅对纹理的某些部分进行 alphablend?

如何在 DX 9 中仅对纹理的某些部分进行 alphablend?

例如,Photoshop 中的图层(或任何其他支持图层的照片编辑程序)。
您可以在图层中绘制一些东西(背景填充 alpha),然后将图层放在原始图像上(在屏幕上绘制纹理),这会导致原始图像 + 仅是我在图层中绘制的东西。

是的,我知道我的英语不是很“闪亮”。

非常感谢,提前!

PS 我的纹理背景填充了 alpha。

0 投票
4 回答
4836 浏览

android - android/opengles alpha 纹理不是半透明的而是二进制透明的

我正在用 alpha 通道绘制一些纹理,但是当它们显示出来时,看起来 alpha 通道只是二进制的。所以一个像素要么是透明的,要么是不透明的,尽管在纹理文件本身中像素是半透明的。混合设置如下:

有解决此问题的方法吗?

上面展示了它应该是什么样子,下面展示了它的样子:

替代文字

0 投票
2 回答
3054 浏览

flash - ActionScript 3 - 在同一影片剪辑的图形上绘制两个形状,避免它们之间的 Alpha 混合

例如:

有了这个,我会得到一个 alpha 值小于 0.5 的框。我想要一个 0.5 alpha 正方形而不使用类似的东西:

显然我不希望它用于绘制正方形,它用于我正在研究的阴影投射算法。

0 投票
1 回答
495 浏览

c# - 如何在 C# 中使用 Alpha 合成(Porter 和 Duff)?

是否有 .NET 的 Alpha Compositing 的实现 (API)。维基百科意味着 Windows 有它的本机实现。当然,它可以通过像素操作来完成,但这将是一个糟糕的表现。如果有本机实现,那么我们应该使用它。

如果没有可以从 .NET 使用的本机实现,那么是否已经有一个库可以实现它?

在 Java 中有一个类 AlphaComposite,非常简单。

0 投票
1 回答
1540 浏览

iphone - OpenGL ES 在多重纹理中使用 glColor4f

我要做的是使用 OpenGL ES 1.1 在 iPhone 上输出蒙版纹理。在我真正想要改变最终结果的 ALPHA 之前,默认的组合行为似乎对我有利!

'a' (Alpha) 浮点变量在这里没有效果:(其他一切都输出正常,除了 alpha 不可控制的 1.0 不透明之外,它被屏蔽并很好地绘制)

[edit]整个颜色根本没有效果,就好像它被设置为 (1, 1, 1, 1) 所以它不仅仅是 alpha。[/edit]

把它想象成你在 Photoshop 中有一个看起来正确的蒙版图层,现在我要做的就是设置该图层的不透明度。我感谢您的帮助!

0 投票
2 回答
1819 浏览

delphi - Delphi 6:如何使用具有 Alpha 通道的 TextOut 创建位图?

我将描述我的总体目标,以防我提出的问题不是获得我正在寻找的答案的最佳形式。我有一个围绕 X 轴旋转的词球或“词球”。随着单词向后旋转(Z 坐标从 -1 到 1,从前到后),我打算更改每个单词的大小和不透明度,以便“前面”中的单词是 100% 不透明和全尺寸的,而单词背面较小且有些透明。我宁愿使用直接的 Delphi 代码来执行此操作,并避免使用 Direct3D 等。我已经让旋转代码工作正常。我只需要实现我的基于 Z 坐标的感知着色想法。

当我创建单词球时,我会为每个单词动态创建一个 TImage 组件。我使用 TCanvas.TextOut() 方法以居中的方式将单词“打印”到 TImage 位图。我打算使用 BitBlt 将该位图复制到包含单词球的主 Canvas 中的正确位置,因为 BitBlt 速度很快并且可以即时调整位图的大小,满足我的感知着色操作的要求之一。

但我不知道促进 Alpha 混合的最佳方法。我知道 Windows 有 AlphaBlend() 调用,而且使用起来相当简单。但我需要知道如何创建一个位图,它是具有 alpha 通道的每字 TImage 组件的副本。请注意,在我的情况下,整个位图将具有统一的 alpha 通道值,因为我希望根据 Z 坐标将不透明度统一应用于整个单词。

使用 TCanvas.TextOut() 制作的位图动态创建的 TImage 组件是否具有 Alpha 通道?如果没有,我如何创建一个,或者实时创建一个 TImage 位图的副本,该位图确实有一个要传递给 AlphaBlend() 调用的 Alpha 通道?如果有更好的方法来完成这一切,请告诉我。

0 投票
1 回答
1319 浏览

delphi - Delphi 6:子图像和主画布之间的 Alphablending 工作,但不在子图像之间

我有一个 Delphi 6 应用程序,其中我有一个 TBitmaps 数组,每个包含一个图像(子图像),该图像是通过使用 clWhite 调用 FillRect() 以用白色填充 TBitmap 的 Canvas 来创建的,然后调用 toTextOut()将一些文本打印到位图的画布上。

我有一个计时器,它更新属于 TImage 组件的主 Canvas,每个 Interval 都使用数组的内容来反映每个子图像 X、Y 坐标因为它们在运动中所做的更改。首先,我使用带有 clWhite 的 FillRect() 来用白色填充主 Canvas。要“打印”子图像,我只需迭代数组并调用 Alphablend() 将每个子图像“打印”到主画布上。每个子图像都有一个 Z 坐标,用于控制不透明度的级别。Z 坐标较高的子图像具有较低的 Alphablend() 值,以使它们看起来比“近距离”的子图像更透明。

alpha 混合对每个单独的子图像都非常有效,具有较高坐标的子图像确实看起来比具有较低 Z 坐标的子图像更透明。但是,我遇到了在 Z 空间中重叠的子图像的问题。重叠子图像之间的 Alpha 混合似乎不起作用。相反,重叠子图像“后面”的子图像被属于覆盖它的图像的白色背景遮挡。我想要的是两个子图像正确重叠,所以看起来两个文本字符串写在彼此之上。相反,我看到前面的文本字符串和包含它的 TBitmap 画布的白色背景无处不在,消除了它“后面”的文本字符串。

谁能告诉我为什么 alpha 混合在每个单独的子图像和主 Canvas 之间起作用,而不是在子图像之间起作用?我只在时间上下文中说子图像之间而不是作为对象,因为它们在打印时都应该成为主画布的一部分,我希望 alpha-blend 能够正确地混合它们,这不会发生。

就好像子图像之间的“白色”没有被视为与子图像和属于主画布的“白色”之间的“白色”一样。

跟进:针对 Andreas 的评论,我将所有子图像 TBitmap 的 PixelFormat 设置为 pf32bit。现在 alpha 混合发生在子图像“之间”。不幸的是,子图像的白色区域没有被视为透明颜色。相反,顶部子图像的白色背景与属于底层子图像的文本进行 alpha 混合,在顶部子图像周围创建一个浅灰色框架,就好像它被涂抹一样。为了获得我想要的效果,我需要完全忽略子图像的白色背景。

0 投票
1 回答
4122 浏览

ios - UIColor `-colorWithPatternImage:` alpha 混合问题解决方案。(iOS SDK 4.1)

解决方案说明,不是问题。

我使用此代码将背景设置为图案图像:

这可行,但 alpha 混合不起作用。可能是一个错误。如何让它发挥作用?

  • 平台:iOS SDK 4.1
0 投票
2 回答
64626 浏览

c++ - 在 C++ Win32 中创建透明窗口

我正在创建一个非常简单的 Win32 C++ 应用程序,其唯一目的是只显示一个半透明的 PNG。窗口不应该有任何镶边,所有的不透明度都应该在 PNG 本身中控制。

我的问题是,当窗口下的内容发生变化时,窗口不会重新绘制,因此 PNG 的透明区域与最初启动应用程序时窗口下的内容“卡住”了。

这是我设置新窗口的行:

对于 RegisterClassEx 的调用,我为背景设置了这个:

这是我的 WM_PAINT 消息处理程序:

需要注意的一点是,应用程序始终停靠在屏幕左侧并且不会移动。但是,当用户打开、关闭或移动它下面的窗口时,应用程序下面的内容可能会发生变化。

当应用程序第一次启动时,它看起来很完美。PNG 的透明(和半透明)部分完美地显示出来。但是,当应用程序下面的背景发生变化时,背景不会更新,它只是从应用程序首次启动时保持不变。事实上,WM_PAINT(或 WM_ERASEBKGND 在背景变化时不会被调用)。

我已经玩了很长时间了,并且已经接近 100% 正确,但并不完全正确。例如,我尝试将背景设置为 (HBRUSH) NULL_BRUSH,并尝试处理 WM_ERASEBKGND。

当窗口下的内容发生变化时,如何让窗口重新绘制?