在利用Qt开发界面时,不可避免的用到qimage.其中QImage::Format_ARGB32是一种常见的格式。顾名思义,每个像素有四个分量:alpha red green blue.但是其内部如何安排各个分量的次序呢?这里先给出答案:其实次序是(从左到右)BGRA.下面做几个实验验证。

先利用photoshop生成一个8乘8的bmp文件,文件左下角的两个像素涂灰,其他位置留白。

现在用qt读取这个文件,并载入QImage::Format_ARGB32格式的QImage.

#include "mainwindow.h"
#include <QPainter>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QImage img("C:\\1.bmp");
    m_img = QImage(8,8,QImage::Format_ARGB32);
	QPainter qp;
	qp.begin(&m_img);
	qp.drawImage(m_img.rect(), img, img.rect());
	qp.end();
}

MainWindow::~MainWindow()
{

}

void MainWindow::paintEvent(QPaintEvent *e)
{
	unsigned char * pData = m_img.bits();//BGRA,且图片的第一行就是内存的第一行
	pData[8 * 4 * 7 + 4 + 0] = 255;
	//pData[8 * 4 * 7 + 4 + 2] = 255;
    QPainter qp;
    qp.begin(this);
    qp.drawImage(rect(), m_img, m_img.rect());
    qp.end();
}

在不对qimage的内存做任何编辑的情况下,这两个像素的内容为:4a 49 49 ff

接下来对最下一行的左起第二个像素进行编辑。

1)修改第一个分量至饱和255:

可见,像素变蓝,说明第一个分量是蓝色。

2) 修改第2个分量至饱和255:

第二个像素变绿,说明是绿色分量

3) 修改第3个分量至饱和255:

说明第三个分量是红色

4)剩下的第四个分量是alpha通道

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐