Как я могу создать объекты QColor в Qt для цветового пространства SRGB?

Кажется, я не могу найти (официальную или неофициальную) документацию по цветам Qt и цветовым пространствам.

Я хотел бы определить QColor для моего приложения Qt. Я исхожу из фона OS X, где я привык иметь [NSColor colorWithDeviceRed:green:blue:alpha:], а также [NSColor colorWithSRGBRed:green:blue:alpha:] и другие варианты.

В большинстве случаев я хотел бы использовать SRGB. Как я могу этого добиться? Также было бы неплохо узнать, к чему приводит использование конструктора QColor(int,int,int,int) по умолчанию, но я подозреваю, что это будут цвета устройства.

Моя целевая платформа — это в основном Windows, поэтому, если вы можете придумать только зависящий от платформы способ создания объектов QColor с компонентами, определенными в цветовом пространстве SRGB, вперед!


person Zsolt Szatmari    schedule 30.06.2015    source источник
comment
Вопрос будет заключаться в том, как вы используете объект QColor постфактум. QColor не имеет пространства sRGB...   -  person peppe    schedule 30.06.2015
comment
Одним из конкретных примеров является использование QPainter для рисования линии определенным цветом sRGB.   -  person Zsolt Szatmari    schedule 30.06.2015
comment
@ZsoltSzatmari В большинстве случаев QPainter будет рисовать на QImage (вот что делает растровый движок для виджетов!), Так что это все еще место на устройстве. Вам нужно как-то сообщить пользователю изображения (например, окна платформы), что растровое изображение имеет определенное цветовое пространство. Qt не позволяет вам делать это напрямую, но вы можете проверить код плагина платформы и внести в него изменения.   -  person Kuba hasn't forgotten Monica    schedule 30.06.2015
comment
вы можете проверить код плагина платформы и что-то там изменить. ‹= сделать это другим способом кажется проще, преобразовав мои значения sRGB в значения устройства и последовательно используя их. Одна связанная с этим проблема заключается в том, что я должен иметь возможность сообщить QImage (и косвенно libpng) о цветовом пространстве устройства. Мне кажется немного странным, что разработчики Qt не подумали об этих вещах.   -  person Zsolt Szatmari    schedule 01.07.2015


Ответы (1)


QColor — это просто контейнер для четырех целых чисел. Все зависит от того, для чего вы его используете. Вам нужно будет показать пример кода того, как вы используете экземпляр QColor.

Однако в большинстве случаев QColor в конечном итоге будет использоваться серверной частью растрового движка. В таком случае он имеет значение цвета устройства. В частности, если вы рисуете с помощью QColor, функции рисования OS X никогда не видят его напрямую. OS X передается только текстура/изображение, которое уже было обработано растровым движком.

person Kuba hasn't forgotten Monica    schedule 30.06.2015
comment
Спасибо за Ваш ответ! 'В большинстве случаев' ? Это где-то задокументировано, в каких случаях это будет цвет устройства, когда где-то еще? Если он используется как цвет устройства (как я подозревал), то мне нужен способ преобразования из srgb в цвета устройства. В основном, это мой вопрос о. - person Zsolt Szatmari; 30.06.2015
comment
@ZsoltSzatmari В большинстве случаев я имею в виду, что обычно QColor в конечном итоге используется движком растровой краски. Если вы используете его для какой-либо другой цели, вы узнаете об этом (скажем, для печати или для какого-либо нерастрового ввода-вывода). - person Kuba hasn't forgotten Monica; 30.06.2015