问题标签 [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.
opengl - 在 OpenGL 中绘制纹理,同时忽略其 Alpha 通道
我有一个纹理加载到内存中,它是具有各种 alpha 值的 RGBA 格式。
图像加载如下:
我想知道如何绘制此纹理,以便将图像中的 alpha 通道视为全 1,并且将纹理绘制为 RGB 图像。
考虑基本图像:
此图像是从 0 到 255 alpha 的渐变,并且整个 RGB 值为 255,0,0
但是,如果我在禁用混合的情况下绘制它,我会得到一个看起来像这样的图像:www.ldeo.columbia.edu/~jcoplan/alpha/no_alpha.png
当我真正想要的是一个看起来像这样的图像时:www.ldeo.columbia.edu/~jcoplan/alpha/correct.png
我真的很感激一些建议让它完全忽略 alpha 通道。请注意,我最初不能将图像作为 RGB 加载,因为我在其他点确实需要 alpha 通道。
编辑:我尝试使用 GL_COMBINE 来解决我的问题:
但仍然没有运气,它仍然将黑色绘制为红色。
graphics - 如何在手动“叠加”混合操作中处理 alpha?
我正在玩一些手动(步行像素)图像处理,并且我正在重新创建标准的“叠加”混合。我在这里查看“Photoshop 数学”宏:
http://www.nathanm.com/photoshop-blending-math/ _ _ _
两个源图像都采用相当标准的 RGBA(每个 8 位)格式,目标图像也是如此。当两个图像完全不透明(alpha 为 1.0)时,结果将按预期正确混合:
但是,如果我的“混合”图层(顶部图像)具有透明度,那么对于如何将 alpha正确地考虑到混合方程中,我会感到有些困惑。我希望它能够工作,这样混合层中的透明像素对结果没有影响,混合层中的不透明像素正常进行覆盖混合,半透明混合层像素对结果有一些缩放效果。
有人可以向我解释混合方程或这样做背后的概念吗?
如果你能帮我做到这一点,那么得到的图像具有正确的预乘 alpha 值(我认为,这只对两层中不透明的像素起作用。)
谢谢!
image-processing - 如何在图像卷积期间使用预乘来解决 alpha bleed 问题?
我正在尝试将框模糊应用于透明图像,并且边缘周围出现“暗晕”。
Jerry Huxtable简短地提到了这个问题,并且一个很好的演示显示了问题的发生:
但是,对于我的生活,我无法理解“预乘 alpha ”如何解决问题。现在举一个非常简单的例子。我有一个 3x3 图像,包含一个红色和一个绿色像素:
实际上剩余的像素是透明的:
现在我们将对图像应用 3x3 框模糊。为简单起见,我们将只计算中心像素的新值。盒子模糊的工作方式是,因为我们有一个 9 位置的正方形(3x3,称为内核),我们取内核中每个像素的 1/9,并将其相加:
所以
在这个非常简化的示例中,计算变得非常简单:
这给了我一个最终的颜色值:
这个颜色太深了。当我在 Photoshop 中对相同的 3x3 像素图像执行 3px 框模糊时,我得到了我所期望的:
在白色上显示时更清晰:
实际上,我在包含透明文本的位图上执行框模糊,并且文本在边缘周围变得暗淡:
我从PixelFormat32bppARGB
格式的 GDI+ 位图开始
应用 3x3 卷积核时如何使用“预乘 alpha”?
任何答案都必须包括新的论坛,因为:
给我错误的答案。
编辑:一个更简单的例子是:
我将使用 0..1 范围内的颜色和 alpha 值执行此数学运算:
我将框模糊卷积过滤器应用于中间像素:
这给出了相当透明的深绿色。
这不是我期望看到的。相比之下,Photoshop 的 Box Blur 是:
如果我假设(0, 0.33, 0, 0.33)
是预乘 alpha,并且不乘它,我得到:
这看起来适合我的全不透明示例;但是当我开始涉及部分透明的像素时,我不知道该怎么办。
也可以看看
png - 将 PNG 转换为预乘 alpha 的方法
寻找某种适用于Windows的简单工具或过程,让我将一个或多个标准 PNG 转换为预乘 alpha。
命令行工具是理想的;我可以轻松访问 PIL(Python Imaging Library)和 Imagemagick,但如果它能让生活更轻松,我会安装另一个工具。
谢谢!
video - FLV 预乘 Alpha 通道 - 作为 swf 添加到网页?
我对预乘 Alpha 通道非常陌生,我唯一的应用程序是 Adobe Flash,我有这个 FLV 电影文件,它有一个预乘 Alpha 通道,我想将它插入网页以作为动画播放,我将其导入闪光,这就是我有点迷茫的地方,不知道如何让它看起来透明
视频看起来是倒置的,所以背景是黑色的,动画是白色的,所以如果我尝试像这样发布它,它只是保持不变,所以看起来不正确,有人能指出我正确的方向吗?
image-processing - 将 PNG 从预乘 alpha 转换为传统的 alpha 透明度?
我很难处理一些具有预乘 alpha 的 PNG 格式的源图像,因为大多数工具根本无法正确支持它。
有什么东西可以“最佳猜测”转换为更传统的 PNG 吗?
php - php中的imagecopyresampled - 预乘alpha问题
对于使用 alpha 值的缓冲区,我对 imagecopyresampled 有疑问。显然,该算法在过滤之前预乘了像素的 alpha 值,这会导致对象周围出现黑色边框。
重现步骤:
拍摄一张在 RGB 部分完全是白色的图像,并且在 Alpha 部分的黑色背景上有一个(抗锯齿!!)白色圆圈(用一个圆圈,而不是一个正方形!)白色和全黑像素,以及由于抗锯齿在圆的边界上的一些渐变像素 - 这意味着输入图像没有预乘 - 它是直的/无遮罩的,因为图像的 RGB 部分是完全白色的)。
使用 imagecopyresampled 将图像缩小一半
在全白图像上合成结果
我所期望的:完全白色的图像
我得到了什么:圆圈轮廓周围的灰色边框
我很确定这是由于缩小算法中的预乘 alpha(该算法将像素 alpha 值与其 rgb 值相乘以计算新的 rgb 值 - 因此白色像素将变为灰色)
有谁知道这个的workarround?
alphablending - 预乘 alpha 的粒子混合问题
我试图从 3D 渲染场景中保存一些纹理,然后让它们重用。
最大的问题是rgb值不能匹配它的alpha值。我需要一些没有黑边的图片,所以我必须使用rgb颜色来划分它的alpha值(Photoshop等图像处理软件只能处理alpha通道未预乘的图片.)
不幸的是,颜色太浅以至于某些结果值被截断为 1。
所以我转向了一种称为预乘 alpha 的技术。(查看更多)。我没有使用着色器,而是使用单独的 alpha 计算。
例如:RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.InverseSourceAlpha;
现在我添加一些渲染状态。RenderState.SourceBlendAlpha = Blend.One;
RenderState.DestinationBlendAlpha = Blend.InverseSourceAlpha;
它运作良好。但是当我尝试处理以下事情时:RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.One;
RenderState.SourceBlendAlpha = Blend.One;
RenderState.DestinationBlendAlpha = Blend.One;
结果完全错误,有人可以告诉我原因吗?
PS:现在我明白了。当我使用非预乘混合状态,即SourceAlpha和inverseSourceAlpha。rgba值肯定控制在0~1之间。但是当我切换到加法状态,即SourceAlpha和1时,rgb值可能超过一个,从而导致不正确的值。
现在我的问题是如何控制 alpha 值,以确保它保留所有细节并且不会同时溢出?
opengl-es-2.0 - OpenGL 和相机预览 - 预乘 alpha - 混合在一起得到“过度饱和”的颜色
好的,这是我真的无法解决的 OpenGL 问题。在 Galaxy S1 和 S2 上一切正常,似乎有几乎相同的 GPU。但是当我尝试制作一个 AR 应用程序时,我总是在我的相机预览顶部遇到透明像素的问题。它仅在像素透明并且看起来像“烧焦的颜色”或值溢出或类似的东西时才会出现。所以请告诉我我做错了什么,或者如果你有 S3 试试看。也许我的刚刚坏了??我为你创建了一个小测试程序。请看一下:
CameraView 看起来像这样:
游戏渲染器:
还有一个小的 MatrixStack 类,但我认为这里不会有问题:
好吧,仅此而已。看起来相机预览“过度曝光”了我的 gl 片段。请至少尝试此代码。我仍然希望我的手机有问题。无论如何,谢谢你的帮助,托拜厄斯
opengl - GLSL 粒子的渲染(premult)
我一直在尝试让粒子渲染库与我的着色器一起使用。它与固定功能完美结合,我知道我的目标是什么。我只是不确定如何进行最后的混合。
它将这样的粒子生命打包到 DWORD 中,并将 dword 设置为顶点属性之一。一个四边形有 4 个这样的顶点。3 个浮动位置,3 个浮动正常,4 个字节漫反射,2 个浮动 uv。我应该如何处理 4byte 属性,在我的 glsl 着色器中将其用作 vec4 还是 float 属性?另外,由于这个库使用预乘 alpha,我应该使用什么样的混合方程?该库是 pyro 粒子库。