C++ QImage::pixel函数的10位数输出具体是什么意思?
我目前正在使用Qt5.12.3,在理解QImage::pixel函数的10位输出时遇到问题。对于此代码:C++ QImage::pixel函数的10位数输出具体是什么意思?,c++,image,colors,qt5,pixel,C++,Image,Colors,Qt5,Pixel,我目前正在使用Qt5.12.3,在理解QImage::pixel函数的10位输出时遇到问题。对于此代码: QImage image; image.load("D:/qtProjects/../image.png", "PNG"); for(int i = 0 ; i < 1920; i++) for(int j = 0; j < 1080; j++) std:: cout << image.pixel(i, j) <<
QImage image;
image.load("D:/qtProjects/../image.png", "PNG");
for(int i = 0 ; i < 1920; i++)
for(int j = 0; j < 1080; j++)
std:: cout << image.pixel(i, j) << "\n";
QImage图像;
image.load(“D:/qtProjects/./image.png”、“png”);
对于(int i=0;i<1920;i++)
对于(int j=0;j<1080;j++)
std::cout这些数字是4个颜色分量(红色、绿色、蓝色和alpha,每个分量8位,不一定按该顺序排列),压缩为32位无符号整数
要提取这些组件,本质上需要提取组成4字节整数的所有字节的值。要做到这一点,有几种方法,但最容易理解的可能是:连续除以256
由于每个字节的值都在[0..255]范围内,因此每次计算该大数字除以256后的剩余部分时,您将提取1个字节的信息(将一个字节视为基256位)
下面是代码:
unsigned char b0 = x % 256;
x = x / 256;
unsigned char b1 = x % 256;
x = x / 256;
unsigned char b2 = x % 256;
x = x / 256;
unsigned char b3 = x % 256;
在上述代码中,b0
将接收x
中最低有效字节的值,b3
将接收最高有效字节的值。它们中的哪一个将是哪一个组件将取决于颜色组件的顺序(无论是RGBA、BGRA、ARGB还是ABGR),并且很可能还取决于机器的端部。但我认为这很容易弄明白
考虑到您发布的样本编号的外观,我认为编号中最重要的字节是alpha通道(即我代码中的b3
为您提供alpha值,),这可能会使b0
变为红色,b1
变为绿色,b2
变为蓝色。可能吧。为了使图像处理更容易,您可以使用类QColor
。与其他许多Qt类一样,您可以使用qDebug()
将其输出到控制台。您需要包含
才能使用它。下面是如何将QColor
与QImage
一起使用的示例:
QImage image;
image.load("D:/qtProjects/../image.png", "PNG");
QColor colorRead(image.pixel(0, 0)); // get color of pixel 0,0
qDebug() << colorRead; // output color with float values 0 - 1
qDebug() << "R: " << colorRead.red(); // output components of color as int 0 - 255
qDebug() << "G: " << colorRead.green();
qDebug() << "B: " << colorRead.blue();
qDebug() << "A: " << colorRead.alpha();
QColor colorWrite(0, 0, 255); // instantiate other color
image.setPixelColor(0, 0, colorWrite); // set pixel 0,0 to the color
将数字转换为十六进制。一切都会揭晓!好的,会有消息的。线索:FF可能是“不透明的”,它的RGBA表示为32位无符号整数。用十六进制打印:writecout Decimal是一个非常糟糕的打印RGBA值的基础。谢谢大家的帮助!谢谢你给我一个非常具体的答案,非常适合我使用。谢谢你的帮助!发现QImage::pixel以AARGGBB格式返回像素统计信息。在看到这两种数字格式后,我很清楚2^32-1是一个10位数的十进制数,而8位数的十六进制数(FFFFFFFF)->32位是正确表示任何ARGB统计数据所必需的,正如您所说的。
QColor(ARGB 1, 0.305882, 0.305882, 0.211765)
R: 78
G: 78
B: 54
A: 255