PNG гамма-коррекция - PullRequest
0 голосов
/ 25 июня 2018

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

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

1 Ответ

0 голосов
/ 26 июня 2018

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

Это поведение можно увидеть в коде как в DirectXTexWIC.cpp , так и в DirectX Tool Kit ScreenGrab.cpp .

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

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

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

...