如何在 Qt 中为 SRGB 颜色空间创建 QColor 对象?
Posted
技术标签:
【中文标题】如何在 Qt 中为 SRGB 颜色空间创建 QColor 对象?【英文标题】:How can I create QColor objects in Qt for the SRGB color space? 【发布时间】:2015-06-30 18:06:44 【问题描述】:我似乎找不到关于 Qt 颜色与颜色空间的(官方或非官方)文档。
我想为我的 Qt 应用程序定义 QColor。我来自 OS X 背景,我习惯于使用[NSColor colorWithDeviceRed:green:blue:alpha:]
和[NSColor colorWithSRGBRed:green:blue:alpha:]
,以及其他选项。
大多数时候,我想使用 SRGB。我怎样才能做到这一点?最好知道使用默认的QColor(int,int,int,int)
构造函数会导致哪里,但我怀疑它会是设备颜色。
我的目标平台主要是 Windows,所以如果你只能想出一种依赖于平台的方法来创建具有在 SRGB 颜色空间中定义的组件的 QColor 对象,那就继续吧!
【问题讨论】:
问题是事后如何使用 QColor 对象。 QColor 没有 sRGB 空间... 一个具体的例子是使用 QPainter 绘制一条具有特定 sRGB 颜色的线条。 @ZsoltSzatmari 在大多数情况下,QPainter
将在QImage
上绘图(这就是光栅绘制引擎为小部件所做的事情!),所以它仍然是设备空间。您需要以某种方式告诉图像的用户(例如平台窗口)光栅图像具有特定的色彩空间。 Qt 不允许您直接执行此操作,但您可以检查平台插件代码并在那里进行更改。
"您可以检查平台插件代码并在那里更改内容。"
【参考方案1】:
QColor
只是一个容纳四个整数的容器。一切都取决于您使用它的目的。您需要展示如何使用 QColor
实例的示例代码。
不过,在大多数情况下,QColor
最终会被光栅绘制引擎后端使用。在这种情况下,它具有设备颜色的含义。具体来说,如果您使用QColor
进行绘图,OS X 绘图函数永远不会直接看到它。 OS X 仅传递已由光栅绘制引擎渲染的纹理/图像。
【讨论】:
感谢您的回答! '大多数情况下' ?这是在某个地方记录的,在其他地方什么情况下会是设备颜色?如果它被用作设备颜色(正如我所怀疑的那样),那么我需要一种方法来从 srgb 转换为设备颜色。基本上这是我的问题。 @ZsoltSzatmari 我所说的“大多数情况”是指通常QColor
最终被光栅绘制引擎使用。如果您将它用于其他目的,您就会知道它(例如用于打印,或用于某些非光栅 I/O)。以上是关于如何在 Qt 中为 SRGB 颜色空间创建 QColor 对象?的主要内容,如果未能解决你的问题,请参考以下文章