问题标签 [premultiplied-alpha]

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 回答
142 浏览

graphics - 如何消除模糊边缘上的光晕?

所以我正在研究一个执行模糊的过滤器。

当图像具有 Alpha 通道时,它会不正确地模糊。这是因为它与位于 alpha=0 部分的彩色像素模糊。

我创建了一个示例来说明。在左上角的图像中,我们有原始图像。它有一个 alpha 通道,但我禁用了它。

在右上角的图像中,我使用 Alpha 通道导入它。它将 Alpha 通道部分中的像素显示为黑色。

在左下角的图像中,我执行了模糊算法。您可以看到边缘有一个明亮的光晕,因为它们在第一张图像中显示的浅色背景像素上变得模糊,即使 alpha 通道在那里。

在右下角的图像中,我将它与背景合成,以便您可以看到它合成不正确。

模糊光环

我读过这可能是一个预乘问题。我已将位于 alpha=0 部分的 RGB 像素预乘以黑色,但它仍然不正确。当我合成那个版本时,你可以看到它产生了一个暗光晕而不是一个明亮的光晕。

似乎我需要知道目标图像的 RGB 值,但这不可能知道,因为用户会确定这一点。

那么我做错了什么?如何调整我的算法,使其正确模糊边缘而不是背景更亮的像素,从而产生明亮的光晕?

我很感激这方面的任何帮助,因为我真的被困住了!

0 投票
1 回答
649 浏览

ios - 如何使用 MetalPetal 遮盖图像并以透明度输出

我有一个不透明的图像和一个不透明的蒙版图像。使用MetalPetal它,MTIBlendWithMaskFilter我可以创建一个输出图像,它正确地掩盖了输入图像,但黑色背景是不透明的。

我希望输出图像具有 alpha 通道,例如,黑色像素具有透明像素,而不是透明像素。

看来我对 premultiplyingAlpha 的误解或误用是这里的问题。

输入图像:

在此处输入图像描述

蒙版图片:

在此处输入图像描述

输出图像:

在此处输入图像描述

0 投票
1 回答
90 浏览

opengl - OpenGL中的预乘alpha和多重采样

我正在将一些三角形渲染成多重采样纹理。然后将该纹理blit 成普通纹理并在屏幕上绘制一个带纹理的四边形。

我需要最终的纹理具有预乘 alpha。有没有办法告诉 OpenGL 自动预乘多采样纹理中的半透明像素(或当 blitting 时)?

或者唯一的方法是使用额外的着色器通道手动执行乘法?