簡體   English   中英

在Qt Qimage和Boost Multi Array之間正確復制數據

[英]Copying data correctly between Qt Qimage and Boost Multi Array

我想將數據從Qt圖像復制到Boost Multi Array,對Multi Array進行一些操作,然后將數據復制回QImage進行顯示。

我正在使用Qimage::bits()訪問原始數據,並嘗試使用std::copy ,並且似乎存在我不理解的數據對齊問題。 這里有關於訪問32 bpp圖像數據的注釋 ,但是即使將QImage轉換為其他格式,問題仍然存在。

我整理了一個片段來說明一個典型的問題。 我可能做錯了很多事情,請多多包涵。 在這里,我試圖將圖像2的上半部分復制到圖像1並獲得此輸出

#include <algorithm>
#include <boost/multi_array.hpp>
#include <QImage>

typedef boost::multi_array<uchar, 3> image_type;

int main() {
    QString path = "/path/to/images/";
    QImage qimage_1(path + "image1.jpg");
    QImage qimage_2(path + "image2.jpg");

    image_type bimage_1(boost::extents[qimage_1.width()][qimage_1.height()][4]);
    image_type bimage_2(boost::extents[qimage_2.width()][qimage_2.height()][4]);

    std::copy(qimage_1.bits(), qimage_1.bits() + qimage_1.width()*qimage_1.height()*4, &bimage_1[0][0][0]);
    std::copy(qimage_2.bits(), qimage_2.bits() + qimage_2.width()*qimage_2.height()*4, &bimage_2[0][0][0]);

    // copy top half of image 2 to image 1
    for(int i = 0; i < qimage_1.width(); i++) {
        for(int j = 0; j < qimage_1.height()/2; j++) {
            bimage_1[i][j][0] = bimage_2[i][j][0];
            bimage_1[i][j][1] = bimage_2[i][j][1];
            bimage_1[i][j][2] = bimage_2[i][j][2];
            bimage_1[i][j][3] = bimage_2[i][j][3];
        }
    }

    std::copy(&bimage_1[0][0][0], &bimage_1[0][0][0] + bimage_1.num_elements(), qimage_1.bits());
    qimage_1.save(path + "output.png");
    return 0;
}

我的.pro文件僅包含SOURCES += main.cpp

任何幫助,非常感謝。

我認為最簡單的方法可能是使用QImage::scanLine(row)逐行復制它。
我認為每條掃描線的末尾可能會出現填充,將您拒之門外。

暫無
暫無

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

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