在建立QImage時可以設定其format,例如有Format_ARGB32、Format_RGB888等,在程式中使用了Format_ARGB32和Format_RGB888兩種格式,說明下這兩種格式下像素中每個顔色分量的分布情況。
Format_ARGB32格式下,一個像素占用4個位元組,每個像素的四個位元組分别代表該像素的BGRA值。
驗證方法:
int imgH = 720;
int imgW = 1280;
int iChannel = 4;
QImage imageData = new QImage(imgW, imgH, QImage::Format_ARGB32);
//給像素指派
uchar picData = imageData->bits();
for (int i = 0; i < imgH; i++) {
for (int j = 0; j < imgW; j++) {
picData[i * imgW * iChannel + j * iChannel + 0] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 1] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 2] = 0xFF;//R
picData[i * imgW * iChannel + j * iChannel + 3] = 0xFF;//A
/*
picData[i * imgW * iChannel + j * iChannel + 0] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 1] = 0xFF;//G
picData[i * imgW * iChannel + j * iChannel + 2] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 3] = 0xFF;//A
picData[i * imgW * iChannel + j * iChannel + 0] = 0xFF;//B
picData[i * imgW * iChannel + j * iChannel + 1] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 2] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 3] = 0xFF;//A
*/
}
}
上述代碼可以生成紅綠藍三張圖檔,通過QLabel控件可以顯示出來,代碼如下:
//Qt上顯示
QPixmap pixmap1 = QPixmap::fromImage(*imageData);
QLabel *pic_show = ui->showWindow;
pixmap1.scaled(pic_show->geometry().width(),
pic_show->geometry().height(),
Qt::KeepAspectRatio);
pic_show->setPixmap(pixmap1);
pic_show->setScaledContents(true);
同樣方法也可以驗證Format_RGB888格式的像素排布,每一個像素占用三個位元組,每個像素的三個位元組分别表示R、G、B顔色分量,驗證代碼如下:
int imgH = 720;
int imgW = 1280;
int iChannel = 3;
QImage imageData = new QImage(imgW, imgH, QImage::Format_RGB888);
//給像素指派
uchar picData = imageData->bits();
for (int i = 0; i < imgH; i++) {
for (int j = 0; j < imgW; j++) {
picData[i * imgW * iChannel + j * iChannel + 0] = 0xFF;//R
picData[i * imgW * iChannel + j * iChannel + 1] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 2] = 0x00;
/*
picData[i * imgW * iChannel + j * iChannel + 0] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 1] = 0xFF;//G
picData[i * imgW * iChannel + j * iChannel + 2] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 0] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 1] = 0x00;
picData[i * imgW * iChannel + j * iChannel + 2] = 0xFF;//B
*/
}
}
上述代碼可以生成紅綠藍三張圖檔,通過QLabel來測試。