質問

Qimageで表示しようとしている画像があります。

これは、行*colsイメージに入るコードのスニペットです。

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

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

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

ご覧のとおり、私のデータバッファーは「列の高さ」であり、「cols*3 wide」です

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ですが、ペイント関数などで任意のものを実行します。

このコードを実行すると、私の戻りは私の画像のように見える画像として戻ってきますが、3つのコピーがあり、もう1つは緑色の色合いがあり、もう1つは黄色く、もう1つは顕著な紫色の色合いが付いています。

これらの3つのデータが互いに広められていれば、それは正しい画像のように思えますか?

役に立ちましたか?

解決

ただの仮定ですが、あなたが言及した(間違った)色から、問題はあなたの割り当て/初期化コードに関するものである可能性があると思います。 char **rgbMapped 変数。このコードを投稿していただけますか?

私はあなたに役立つかもしれないヒントを与えるために、おそらく正しい(?)初期化コードをBellowに書くようにします(コードをコンパイルしていないため、構文エラーについて謝罪します)。 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バイトの境界で開始する必要があります。また、パックされたピクセル形式ではない可能性があるため、各ピクセルは3ではなく4バイトです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top