Как заставить Direct2D обрабатывать D2D1_COLOR_F как sRGB? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть неигровое оконное приложение Win32, которое использует контекст устройства Direct2D / цель рендеринга HWND для рисования окна (например, «Блокнот», а не полноэкранная игра).

В настоящее время D2D1_COLOR_F рассматривается как в цветовом пространстве устройства, например, на дисплее с широкой гаммой цвет #ff0000 (красный) рассматривается как максимальный красный, который может отображать монитор (и в этом случае довольно интенсивный красный).

Вопрос : как заставить Direct2D обрабатывать D2D1_COLOR_F входы (например, FillRectangle() или DrawTextLayout()) как в цветовом пространстве sRGB вместо этого?

Для иллюстрации различия попробуйте поискать «красный» в Chrome и Firefox на Windows на широком экране гаммы, и сравните разницу - Chrome использует sRGB, а красный довольно приглушен, в то время как Firefox использует цветовое пространство устройства, а красный в нем - самый насыщенный красный из возможных.

Подробности

Буферы цепочки обмена создаются с ::D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE). Я попытался DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, но он был отклонен как несовместимый формат.

...