如何在 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在qt中为QPushButton的背景颜色设置动画?

如何在OpenCV中使用Adobe RGB色彩空间读取jpeg图像?

在 MATLAB 中为分割的图片分配颜色

将RGB转换为sRGB?

ImageMagick如何输出十六进制颜色而不是SRGB?

在具有多重采样的 QGLFramebufferObject 中使用 sRGB 颜色