Разве WPF не поддерживает 10-битные мониторы (30-битные цвета)?
Мне нужно поддерживать отображение 10 бит на пиксель (30 цветов) в приложении для просмотра изображений WPF.
У меня есть рабочая установка (10-битный экран и Nvidia Quadro), где я смог проверить работоспособность 10-битной поддержки, протестировав градиент в PhotoShop: ( http://www.tedlansingphotography.com/blog/?p=287). и демонстрационная программа NEC (обе, насколько я вижу, используют OpenGL).
Однако я не могу заставить мое приложение WPF отображать хороший градиент без полос. Я попытался процедурно сгенерировать WritableBitmap с PixelFormats.Rgb48 и PixelFormats.Bgr101010, но когда я рисую его на экране (назначая его System.Windows.Controls.Image.Souce), я все еще вижу полосу.
- Разве WPF не поддерживает 10-битные мониторы?
- Существуют ли альтернативные API, поддерживающие WPF, которые его поддерживают (или мне нужно переписать программу в OpenGL)?
2 ответа
Wpf не поддерживает отображение 10 бит на канал (бит / канал); всего 8 бит на канал, несмотря на манипуляции с файлом на 10 бит на канал и тот факт, что WPF имеет внутреннее взаимодействие с DirectX.
Чтобы иметь 10 бит на канал внутри WPF, вы можете добавить OpenGL или DirectX display; Преимущество использования DirectX над OpenGL состоит в том, что дисплей 10bpc будет поддерживаться и с видеокартами Geforce; Дисплей OpenGL 10 bpc поддерживается только Quadro, если я могу упомянуть производителя GPU, которого я знаю.
Photoshop использует OpenGL для отображения, поэтому отображение 10bpc с Photoshop является функциональным только для Quadro (это связано с более полными функциональными возможностями OpenGL, поддерживаемыми драйверами Quadro).
http://%20https://github.com/Microsoft/WPFDXInterop
https://www.codeproject.com/Articles/23736/Creating-OpenGL-Windows-in-WPF
https://www.codeproject.com/Articles/265903/Using-OpenGL-in-a-WPF-Application
10-битный режим не дает вам больше цветов, обычно вы получаете несколько уровней одного и того же цвета, если остаетесь в sRGB.
Ключевым моментом является управление цветом вашего приложения, чтобы вы могли отображать более широкое цветовое пространство. Лучшее, что вы можете сделать, — это полностью использовать собственное цветовое пространство вашего монитора. На первом этапе вам необходимо измерить его с помощью калибратора.
Взгляните на пакет Nuget Mscms.WPF для преобразования цветов в различные цветовые профили.