PNG гамма-коррекция
Я использовал DirectXTex
библиотека для захвата скриншота игры DX11 и сохранения его в файл. Проблема в том, что он прекрасно работает, когда я сохраняю его в формате JPEG, но если я сохраню его в формате PNG, изображение станет очень ярким и размытым. Я проверил изображение с помощью TweakPNG
и обнаружил, что гамма была установлена на 1,0, и это то, что вызывает проблему. Я проверил изображения, снятые некоторыми другими программами, в том числе инструментом для разрезания, и они, кажется, используют 0,45455 в качестве гаммы, или они вообще не учитывают значение гаммы.
Я не знаю, если DirectXTex
позвольте мне указать значение гаммы или нет. Я даже не уверен, если WIC
имеет эту функцию, так как я не могу найти полезную информацию ни на MSDN, ни на других сайтах.
1 ответ
По умолчанию DirectXTex добавит sRGB
кусок к PNG
файл, который он пишет, если формат DXGI_FORMAT_*_SRGB
, Кроме того, если формат не DXGI_FORMAT_*_SRGB
Я явно удаляю sRGB
кусок и установить gAMA
кусок до 1,0, потому что в противном случае WIC всегда добавляет sRGB
Кусок.
Это поведение можно увидеть в коде как в DirectXTexWIC.cpp, так и в модуле ScreenGrab.cpp набора инструментов DirectX.
Если вы не выполняете "гамма-правильный" рендеринг, где ваша цель рендеринга DXGI_FORMAT_*_SRGB
форматировать, но иметь содержание sRGB в DXGI_FORMAT_*
формат, то я рекомендую передать функции формат sRGB.
В DirectXTex это легко сделать с помощью MakeSRGB
функция.
Гамма-коррекция в формате PNG немного беспорядочная. Смотрите этот пост в блоге