簡體   English   中英

Qt QImage顯示錯誤的灰度圖像

[英]Qt QImage shows wrong grayscale image

我想在Qt 5.12中將0到255之間的整數值矩陣可視化為灰度圖像。 首先,我構建了一個樣本256x256 uchar數組,每行的值介於0和255之間。 然后我嘗試用QImage和format_grayscale作為格式顯示圖像。 但令人困惑的是,生成的圖像在最后一行中包含受干擾的像素。

結果圖像

我還創建了一個灰度色彩圖,並嘗試使用format_indexed8,但結果相同。 這是我的代碼。

uchar imageArray[256][256];
for (int i = 0; i < 256; i++)
{
    for (int j = 0; j < 256; j++)
    {
        imageArray[i][j] = uchar(j);
    }
}

QImage image(&imageArray[0][0],
                256,
                256,
                QImage::Format_Grayscale8);

我的猜測是你的緩沖區被解除分配並被部分覆蓋,然后才能顯示它。 在使用不執行深層復制的構造函數時,確保數據緩沖區保持有效是您的責任。

引用Qt文檔

構造具有給定寬度,高度和格式的圖像,該圖像使用現有的內存緩沖區數據。 必須以像素為單位指定寬度和高度。 bytesPerLine指定每行的字節數(stride)。

緩沖區必須在QImage的整個生命周期內保持有效,並且所有未復制或以其他方式從原始緩沖區中分離的副本都必須保持有效。 圖像不會在銷毀時刪除緩沖區。 您可以提供一個函數指針cleanupFunction以及一個額外的指針cleanupInfo,它將在銷毀最后一個副本時被調用。

您不應該使用矩陣,而是使用大小為256x256 = 65535的數組,
所以代替:

uchar imageArray[256][256]; 

使用 :

uchar imageArray[65536];

然后用您想要的值填充數組。 然后,調用QImage的構造函數:

QImage image(imageArray, 256, 256, QImage::Format_Grayscale8);

暫無
暫無

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

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