PNG伽玛校正

时间:2018-06-25 20:04:30

标签: c++ directx-11 wic directxtk

我使用了DirectXTex库来捕获DX11游戏的屏幕截图并将其保存到文件中。问题是,当我将其另存为jpeg时,它的效果很好,但如果将其另存为png,则图像将变得超亮并褪色。我使用TweakPNG检查了图像,发现gamma设置为1.0,这就是引起问题的原因。 TweakPNG 我检查了由其他软件(包括截图工具)拍摄的图像,它们似乎使用了0.45455作为伽马,或者完全忽略了伽马值。

我不知道DirectXTex是否可以让我指定伽玛值。我什至不确定WIC是否具有此功能,因为我似乎无法在MSDN或其他站点上找到有用的信息。

1 个答案:

答案 0 :(得分:3)

默认情况下,如果格式为sRGBDirectXTex会将PNG块添加到它写入的DXGI_FORMAT_*_SRGB文件中。此外,如果格式为 not DXGI_FORMAT_*_SRGB,则我明确删除sRGB块并将gAMA块设置为1.0,因为否则WIC总是 添加sRGB块。

您可以在DirectXTexWIC.cppDirectX Tool KitScreenGrab.cpp模块的代码中看到此行为。

如果在渲染目标为DXGI_FORMAT_*_SRGB格式但sRGB内容为DXGI_FORMAT_*格式的情况下不进行“伽玛校正”渲染,那么我建议您通过sRGB版本函数的格式。

在DirectXTex中,使用MakeSRGB函数很容易做到这一点。

  

PNG格式的伽玛校正有些混乱。参见this blog post