我从一段简单地访问图像坐标的代码中得到了意想不到的输出,下面是一段代码:
QImage image(imageFileNames[frameNumber]);
QRgb qrgb(image.pixel(493,114));
QColor testCol(qrgb);使用调试器确保我获得了正确的图像路径,我得到了类似于../seq/0001.png的内容,这与预期不谋而合。但是,testCol具有以下值:
[argb]
alpha 65535
blue 28013
green 24415
pad 0
red 59367而不是255,255,255范围内的预期值。此外,qrb的值为4293353325。像素坐标在图像范围内(720x288图像),图像为.png格式(QImage::Format_RGB32)。
我还发现,这个问题似乎是整个应用程序的全局问题,任何新编写的代码似乎都继承了这一行为。
在进一步的实验中,使用以下代码:
QRgb qrgb(image.pixel(1,1)); //again this is in range
int blue = qBlue(qrgb);
int red = qRed(qrgb);
int green = qGreen(qrgb);
QColor testCol(red,green,blue, 255);testColor的值仍然是错误的。然而,红色、绿色和蓝色都显示了预期值。这似乎是QColor构造函数的一个问题?我真的不太确定到底发生了什么。
你知道是什么原因导致了这种行为吗?我在Ubuntu 10.10上运行Qt 4.7。
发布于 2011-06-09 13:45:59
QColor是不同结构的联合。每个结构由5个无符号短文组成。
QT使用内部位移位来存储RGB值。因此,当您指定"1“作为蓝色分量时,它会将其转换为make,比如257。当你检查一个QColor时,你的调试器会把你的257显示为蓝色组件,你会大吃一惊的!
另一方面,当您使用QColor的blue()方法时,您应该得到1!
不要使用调试器来检查QColor,请使用它的getter和setter方法。
下面是取自QT code的一个例子。你可以清楚地看到位移位。
QColor::QColor(QRgb color)
{
cspec = Rgb;
ct.argb.alpha = 0xffff;
ct.argb.red = qRed(color) * 0x101;
ct.argb.green = qGreen(color) * 0x101;
ct.argb.blue = qBlue(color) * 0x101;
ct.argb.pad = 0;
}发布于 2011-06-08 21:49:51
在QColor类的描述中(在整数与浮点精度部分),解释了颜色分量是使用16位整数存储的。因此,RGBA值存储在0-65535的范围内。因此,也许代码已经进化,现在返回的是16位整数,而不是8位。
我现在不能测试,但问题是:是函数结果错误还是文档错误?
您应该打开一个问题,将此问题指向Qt开发团队。
https://stackoverflow.com/questions/6279559
复制相似问题