问题标签 [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.
ios - 带有 BGRA CgBI 预乘 alpha 的 PNG 图像
我有 Apple iOS 优化的 BGRA PNG 格式的 PNG(我使用OptimizedPNG得到的),并希望以一种告诉 CoreGraphics 不要忽略图像的 alpha 分量的方式绘制它们。我正在画CGContextRef
一个drawRect:
编辑:渲染的图像在应该完全透明的地方显示为黑色(有时是其他随机伪影)。不透明区域正常渲染。
CGImageAlphaInfo
我从图像中得到的是kCGImageAlphaNoneSkipLast
,这似乎表明 OptimizedPNG 保存图像的方式存在问题。我认为这应该是kCGImageAlphaPremultipliedLast
。
也许 PNG 块是错误的,但我看不出 IHDR 有什么问题,而且我几乎找不到关于 CgBI 块的信息。
这是 OptimizedPNG 保存颜色数据的方式:
iphone - 如何使用 TextureTool 创建带有预乘 alpha 的 PVR?
如何使用 XCode 纹理工具为 iPhone 创建带有预乘 alpha 的 pvr 纹理?
opengl - DXT5 的预乘 alpha
我将具有透明 alpha 的 DDS 图像 (DXT5) 加载到 OpenGL 中。因为 alpha 没有预乘并且不能根据 DXT5规范进行预乘,所以我在纹理的可见部分周围出现了薄薄的黑色光晕,因为我在 GPU 上进行了一些混合操作。我的问题是:什么是最好的解决方法为此。我的 OpenGL 渲染器在从 IO 加载的每一帧上更新场景纹理,所以如果我解压缩 DDS 然后 pre-muliply ,然后压缩回来我会得到巨大的开销。我认为的另一个选择是添加另一个渲染通道并做 pre - 在片段着色器中相乘并渲染到纹理,然后将其用于主通道。这增加了整个管道的开销,因为我已经有一个下降通道数。这里有哪些额外的选项?
ios - 在 iOS 中加载 4 通道纹理数据
我想从 iOS 中的文件加载 4 通道纹理数据,所以我将纹理视为(连续)贴图
如果我使用 fileformat .png
,XCode/iOS 将文件视为图像,因此将每个组件rgb
与a
(预乘 alpha)相乘,从而破坏我的数据。我应该如何解决这个问题?例子可能是
- 使用两个带有组件的纹理
rgb
(3 通道) - 除法后阿尔法
- 使用其他文件格式
其中,我认为最好的解决方案是使用另一种文件格式。GL 压缩文件格式 (PVRTC?) 不是 Apple 平台独立的,并且似乎具有低分辨率(4 位)(参考)。
编辑:如果我自己在下面的回答是正确的,则无法在 iOS 中获取 png 的 4 通道数据。由于 OpenGL 是关于创建图像而不是呈现图像,因此应该可以以某种方式加载 4 通道数据。png 是图像的文件格式(压缩取决于所有 4 个通道但是一个通道的压缩独立于其他通道),所以有人可能会争辩说我应该使用另一种文件格式。那么我应该使用哪些其他压缩文件格式,哪些易于在 iOS 中读取/集成?
更新:“组合”提到了一种加载 4 通道非预乘纹理的方法,所以我必须给他正确的答案。但是,该解决方案有一些我不喜欢的限制。我的下一个问题是“从 iOS 中的 png 文件访问原始 4 通道数据”:)
我认为这是一个糟糕的库设计,无法读取 4 通道 png 数据。我不喜欢系统试图比我自己更聪明。
colors - Color.FromNonPremultiplied 使用 BlendState.NonPremultiplied 进行不同的着色
在我的 XNA 项目中,我使用未处理的图像并绘制它们,BlendState.NonPremultiplied
使它们在边缘看起来很正常。但是当我在方法中使用非白色 ( Color.FromNonPremultiplied(12, 34, 56, 78)
) 时SpriteBatch.Draw
,它不会像BlendState
设置为默认值时那样对精灵进行着色。
如何在不切换到默认混合状态的情况下实现与默认混合状态相同的着色?
opengl-es - 将每个像素乘以其 alpha 打开 GLES 1.1(预乘)然后反转
我正在从事 GLES 1.1 中的项目。它必须是 GLES 1.1。
但它必须做一些预乘,即获取每个像素,并将其从 rgba = r*a,b*a,g*a,a 更改。然后稍后将其反转。
如果我可以访问着色器,那将没问题,但当然是 gles 1.1 我没有。
通过 readpixels 执行它,然后在 CPU 上执行它并将其放回非常慢,所以我试图想办法可以作弊。
现在我可以做预乘的一种方法是利用 glTexEnvi
但之后,我需要扭转操作。对于我的生活,我想不出办法来扭转它。
如果一切都具有相同的 alpha,我可以滥用 glLighting 功能,但遗憾的是它们没有。
我觉得我有点注定要失败。
也许我可以只使用共享上下文并做一个 GLES 2.0 的片段......但我觉得这会带来它自己的开销
如果有人对此有任何想法或想法,我将不胜感激!
video - 如何判断FFmpeg解码的视频帧中的颜色是否预乘了alpha?
avcodec_decode_video2()
当我使用 FFmpeg ( , )解码视频帧时sws_scale()
,对于某些视频(例如 ProRes4444),我得到的颜色预乘了 alpha,而对于其他视频(例如 QuickTime PNG),我得到的颜色没有预乘通过阿尔法。
如何判断颜色是否预乘?或者,我如何告诉 FFmpeg 始终提供预乘或未预乘(“直 alpha”)颜色?
opengl - Opengl预乘alpha图像渲染过程
我一直在学习 OpenGL2.0 渲染的东西,这里有一些个人对 alpha 渲染的理解,我想知道它们是否正确:
假设我有一个只有一个像素(src 图像)的 PNG(32 位)文件(无预乘 alpha 图像)
这里有四个示例,每个示例 4 列。以第 2 行为例:
(6) 的结果肯定是错误的,因为透明度丢失了,而 (5) 的结果应该是好的。
这就是为什么我应该将 GL_SRC_ALPHA 用于无预乘 alpha 图像,将 GL_ONE 用于预乘 alpha 图像。
winapi - ILC_COLOR32 图像列表中的图像是否预乘了 alpha?我收到相互矛盾的信息
这里非常简单的问题:ILC_COLOR32
图像列表是否经过 alpha 预乘?Stack Overflow 上的各种问题,比如这个,暗示它们是;然而,这个 wxWidgets 错误表明并非如此。微软实际所说的唯一ILC_COLOR32
用于 alpha 混合图像列表条目的地方没有说(所有ILC_COLOR32
的文档都说它是一个“32 位 DIB 部分”,如果我BITMAPINFOHEADER
正确理解文档, 技术上不包含 alpha 信息;每种颜色的前 8 位被忽略)。谢谢!