1

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

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

4

1 回答 1

3

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

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

如果您没有在渲染目标是一种DXGI_FORMAT_*_SRGB格式但具有某种格式的 sRGB 内容的情况下不进行“伽玛校正”渲染DXGI_FORMAT_*,那么我的建议是您将格式的 sRGB 版本传递给函数。

在 DirectXTex 中,这很容易通过该MakeSRGB功能完成。

PNG格式的伽马校正有点混乱。请参阅此博客文章

于 2018-06-25T22:39:32.340 回答