为什么CAMetalLayer视图和png文件的颜色不同?

问题描述 投票:0回答:0

我正在使用 Metal 进行渲染。我试图将纹理转换为具有透明背景和半透明主题(带 Alpha)的 png(如贴纸),但是当我将 MTLTexture 转换为 PNG 文件并查看图像时,颜色看起来比视图中显示的颜色。 (当CAMetalLayer设置中isOpaque = false时,它在png文件中的显示方式与亮色相同。)

目前我已经设置了 isOpaque = false,我想将其转换为具有相同颜色的 png。

可以有多个主题,每个主题都经过 Alpha 混合后显示在屏幕上。

像素格式为 bgra8Unorm,色彩空间使用 CGColorSpaceCreateDeviceRGB()。

你有什么经验或猜测吗?

在输出气球图像的情况下,背景指定为 alpha 0,主体指定为 alpha 0.5。 (上方是结果图像(明亮),下方是预期图像(正常))

result

expect

我是直接将src和dst导入到shader中进行混合,我使用的公式如下:

formula

let alpha = srcAlpha + dstAlpha * (1 - srcAlpha)
let color = (srcRGB * srcAlpha + dstRGB * dstAlpha * (1 - srcAlpha)) / alpha

请随时告诉我任何信息!

我想我已经尝试了谷歌上找到的所有方法。

即使颜色直接从着色器返回而不进行混合,视图中的颜色和 png 文件中的颜色也存在差异。

graphics shader metal alpha blending
© www.soinside.com 2019 - 2024. All rights reserved.