Qimage :: Pixel函数的10位输出特别是指的是什么



我当前正在使用QT 5.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) << "n";

在我收到的控制台输出的一部分中:

4278190080427865166442785858714278651664

问题是,我无法理解如何在线计算器中使用这些10位数字来查看实际的像素颜色。我所知道的是,它以某种方式以ARGB或RGBA格式解释颜色。感谢您的关注!

这些数字是4个颜色组件(红色,绿色,蓝色和alpha,每个颜色为8位,而不一定按顺序(包装成一个32位无签名的整数。/p>

要提取这些组件,本质上,您需要提取包含4字节整数的所有字节的值。为此,您有几种方法,但最容易理解的方法可能是:连续分裂到256。

由于每个字节的值在[0..255]范围内,您每次计算该大数字的其余部分时,都会提取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(,并且很可能也可能取决于机器的Endianness。但是我认为很容易弄清楚。

鉴于您已发布的示例号的外观,我认为该数字中最重要的字节是alpha频道(即我的代码中的b3为您提供了alpha值(,这可能会使b0是红色的,b1为绿色,b2为蓝色。可能。

要使图像操作更容易,您可以使用类QColor。与许多其他QT类一样,您可以使用qDebug()将其输出到控制台。您需要包括<QDebug>才能提供可用。这里一个示例如何将QColorQImage使用:

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

可能的输出:

QColor(ARGB 1, 0.305882, 0.305882, 0.211765)
R:  78
G:  78
B:  54
A:  255

最新更新