2011-08-02 6 views
0

QtイメージのデータをBoost Multi Arrayにコピーし、マルチアレイに何らかの操作を行い、データをQImageにコピーして表示します。Qt QimageとBoost Multi Array間でデータを正しくコピーする

生データにQimage::bits()でアクセスし、std::copyでコピーしようとしていますが、わからないデータの整列に問題があるようです。 32-bppイメージのデータにアクセスする方法についてはnote hereがありますが、QImageを別の形式に変換しても問題は解決しません。

私は典型的な問題を示すスニペットをまとめました。私が間違ってやっていることは複数あるかもしれません。ここで私はImage 1Image 2の上半分をコピーしようとthis output

#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

すべてのヘルプが含まれています。

答えて

0

おそらく最も簡単な方法は、行ごとにQImage::scanLine(row)を使用してコピーすることです。
私は、あなたを投げ捨てている各スキャンラインの最後にパディングがあると思います。

関連する問題