QTにこの24ビット画像を出力する方法
-
12-10-2019 - |
質問
そうであるように定義されている署名されていないチャーアレイがあります:
unsigned char **chars = new unsigned char *[H];
for(int i = 0; i < H; i++)
{
chars[i] = new unsigned char[W*3];
}
ここで、hは画像の高さであり、wは幅であり、charは入力画像の行x列の上にループするその関数の残りの部分に入力されます。 Charsは、赤い緑色の青色に埋め込まれています
私はこのようなものでそれを読もうとしています:
QImage *qi = new QImage(imwidth, imheight, QImage::Format_RGB888);
for (int i = 0 ; i < imheight ; i++)
for (int j = 0 ; j < imwidth ; j++)
{ //not sure why, but have to flip j and i in the index for setPixel
qi->setPixel(j,i,qRgb(imageData[i][j],imageData[i][j+1],imageData[i][j+2]));
j+=3;
}
QPixmap p(QPixmap::fromImage(*qi,Qt::AutoColor));
QPixmap p1(p.scaled(ui->menuBar->width(),ui->menuBar->width(), Qt::KeepAspectRatio, Qt::SmoothTransformation ));
ui->viewLabel->setPixmap(p1);
ui->viewLabel->setFixedHeight(p1.height());
ui->viewLabel->setFixedWidth(p1.width());
イメイガンタアレイのこの呼び出し関数にチャージが返されました。
私は何が間違っているのですか?ピクセルごとに3つの符号なしのチャーを明確に割り当てている場合でも、別の形式を使用する必要があります(そのため、RGB888形式を選択しました)。投稿されたこのコードは画像を返しますが、誤って表示されています - 部分的にスクランブルし、洗い流されました。
ありがとう
解決
aを作成できます データブロックから直接Qimage すべてのピクセルをコピーせずに。
画像は別々の行で保存されているため、次のようなものが必要です
QImage image = new QImage(width,height,QImage::RGB888)
for (int h=0;h<height;h++) {
// scanLine returns a ptr to the start of the data for that row
memcpy(image.scanLine(h),chars[h],width*3);
}
RGB32を使用する場合は、各ピクセルのアルファチャネルを0xffに手動で設定する必要があります-memset()最初にデータ全体を0xffにします
所属していません StackOverflow