У меня есть неигровое оконное приложение 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
, но он был отклонен как несовместимый формат.