PNG гамма-коррекция

Я использовал DirectXTex библиотека для захвата скриншота игры DX11 и сохранения его в файл. Проблема в том, что он прекрасно работает, когда я сохраняю его в формате JPEG, но если я сохраню его в формате PNG, изображение станет очень ярким и размытым. Я проверил изображение с помощью TweakPNG и обнаружил, что гамма была установлена ​​на 1,0, и это то, что вызывает проблему.
TweakPNG
Я проверил изображения, снятые некоторыми другими программами, в том числе инструментом для разрезания, и они, кажется, используют 0,45455 как гамму, или они вообще не учитывают значение гаммы.

Я не знаю, если DirectXTex позвольте мне указать значение гаммы или нет. Я даже не уверен, если WIC имеет эту функцию, так как я не могу найти полезную информацию ни на MSDN, ни на других сайтах.

1

Решение

По умолчанию DirectXTex добавит sRGB кусок к PNG файл, который он пишет, если формат DXGI_FORMAT_*_SRGB, Кроме того, если формат не DXGI_FORMAT_*_SRGB Я явно удаляю sRGB кусок и установить gAMA кусок до 1,0, потому что в противном случае WIC всегда добавляет sRGB Кусок.

Вы можете увидеть это поведение в коде в обоих DirectXTexWIC.cpp и в Набор инструментов DirectX«s ScreenGrab.cpp модуль.

Если вы не выполняете «гамма-правильный» рендеринг, где ваша цель рендеринга DXGI_FORMAT_*_SRGB форматировать, но иметь содержание sRGB в DXGI_FORMAT_* формат, то я рекомендую передать функции формат sRGB.

В DirectXTex это легко сделать с помощью MakeSRGB функция.

Гамма-коррекция в формате PNG немного беспорядочная. Увидеть этот блог

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]