簡體   English   中英

如何在QImage中顯示此數據緩沖區

[英]How to display this data buffer in a QImage

我有一個圖像試圖顯示在QImage中。

這是填充行* cols圖像的代碼片段:

    rgbMapped[row][col * 3] = red;

    rgbMapped[row][col * 3 + 1] = green;

    rgbMapped[row][col * 3 + 2] = blue;

如您所見,我的數據緩沖區為“行高”,為“ cols * 3寬”

rgbMapped是一個無符號的char **數組。 所以回到我的QT代碼中,我有以下內容:

QImage *qi = new QImage(getWidth(), getHeight(), QImage::Format_RGB888);

for (int h = 0; h< getHeight(); h++){
    memcpy(qi->scanLine(h), rgbMapped[h], getWidth()*3);
}
QPixmap p(QPixmap::fromImage(*qi,Qt::ColorOnly));

if(scene.items().contains(item)){
    scene.removeItem(item);
}
item = new ImagePixmapItem(p);
scene.addItem(item);
ui->graphicsView->setScene(&scene);
ui->graphicsView->show();

ImagePixMapItem是我創建的QGraphicsPixmapItem,它允許我攔截某些鼠標事件,但是我不會使用任何繪畫功能或任何東西進行任何操作。

當我運行此代碼時,我的返回信息將以與我的圖像相似的圖像的形式返回,除了三份,一份帶有綠色,一份看上去是淡黃色,另一份帶有明顯的紫色。

如果這三部分數據彼此重疊,則好像是正確的圖像?

只是一個假設,但是從您提到的(錯誤的)顏色來看,我懷疑問題可能出在與char **rgbMapped變量有關的分配/初始化代碼上。 您能發布這個代碼嗎?

我將嘗試在下面編寫一個可能正確的初始化代碼,以便為您提供一個可能有所幫助的提示(我尚未編譯該代碼,因此,對於任何語法錯誤,我深表歉意)。 我使用malloc(),但也可以使用new()運算符。

// allocate a single buffer for all image pixels
unsigned char *imgbuf = malloc(3 * getWidth() * getHeight());

// allocate row pointers
unsigned char **rgbMapped = malloc(getHeight() * sizeof (unsigned char *)); 

// Initialize row pointers
for (int h=0; h < getHeight(); h++)
{
  *rgbMapped[h] = &imgbuf[h * 3 * getWidth()];
}

// ... do your processing

// Free the image buffer & row pointers
free(imgbuf);
imgbuf = NULL;
free(rgbMapped);
rgbMapped = NULL;

重要的部分是行指針的初始化(您是否忘記了* 3?)。 只是我的2c。

您在大步向前嗎? 每條掃描線必須從4字節邊界開始。 而且它可能不是壓縮像素格式,因此每個像素為4字節而不是3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM