PNG 伽玛校正
PNG Gamma Correction
我使用 DirectXTex
库捕获了 DX11 游戏的屏幕截图并将其保存到文件中。问题是当我将它保存为 jpeg 时效果很好,但如果我将它保存为 png 图像会变得非常明亮并被洗掉。我使用 TweakPNG
检查图像,发现伽马设置为 1.0,这就是导致问题的原因。
我检查了一些其他软件拍摄的图像,包括截图工具,它们似乎使用 0.45455 作为伽马,或者他们完全忽略了伽马值。
我不知道 DirectXTex
是否会让我指定伽玛值。我什至不确定 WIC
是否具有此功能,因为我似乎无法在 MSDN 或其他站点上找到有用的信息。
默认情况下,如果格式为 DXGI_FORMAT_*_SRGB
,DirectXTex 会将 sRGB
块添加到其写入的 PNG
文件中。此外,如果格式是 not DXGI_FORMAT_*_SRGB
我明确删除 sRGB
块并将 gAMA
块设置为 1.0 因为否则 WIC always 添加 sRGB
块。
您可以在两个 DirectXTexWIC.cpp and in the DirectX Tool Kit's ScreenGrab.cpp 模块的代码中看到此行为。
如果您没有在渲染目标为 DXGI_FORMAT_*_SRGB
格式但具有 DXGI_FORMAT_*
格式的 sRGB 内容的情况下进行 'gamma-correct' 渲染,那么我的建议是您传递 sRGB函数格式的版本。
在 DirectXTex 中,使用 MakeSRGB
函数可以轻松完成。
Gamma correction in the PNG format is a bit of a mess. See this blog post
我使用 DirectXTex
库捕获了 DX11 游戏的屏幕截图并将其保存到文件中。问题是当我将它保存为 jpeg 时效果很好,但如果我将它保存为 png 图像会变得非常明亮并被洗掉。我使用 TweakPNG
检查图像,发现伽马设置为 1.0,这就是导致问题的原因。
我不知道 DirectXTex
是否会让我指定伽玛值。我什至不确定 WIC
是否具有此功能,因为我似乎无法在 MSDN 或其他站点上找到有用的信息。
默认情况下,如果格式为 DXGI_FORMAT_*_SRGB
,DirectXTex 会将 sRGB
块添加到其写入的 PNG
文件中。此外,如果格式是 not DXGI_FORMAT_*_SRGB
我明确删除 sRGB
块并将 gAMA
块设置为 1.0 因为否则 WIC always 添加 sRGB
块。
您可以在两个 DirectXTexWIC.cpp and in the DirectX Tool Kit's ScreenGrab.cpp 模块的代码中看到此行为。
如果您没有在渲染目标为 DXGI_FORMAT_*_SRGB
格式但具有 DXGI_FORMAT_*
格式的 sRGB 内容的情况下进行 'gamma-correct' 渲染,那么我的建议是您传递 sRGB函数格式的版本。
在 DirectXTex 中,使用 MakeSRGB
函数可以轻松完成。
Gamma correction in the PNG format is a bit of a mess. See this blog post