7

グラフィックプログラミング(ピクセル、画像など)は初めてです.RawデータをQImageに変換してQLabelに表示しようとしています。問題は、生データが任意のデータである可能性があることです (実際には画像の生データではなく、バイナリ ファイルです)。その理由は、ピクセルやそのようなものがどのように機能するかを深く理解するために、ランダムになることがわかっているからです。奇妙な結果の画像ですが、動作します。私はこのようなことをしていますが、私はそれを間違っていると思います!

QImage *img = new QImage(640, 480, QImage::Format_RGB16); //640,480 size picture.
//here I'm trying to fill newly created QImage with random pixels and display it.
for(int i = 0; i < 640; i++)
{
    for(int u = 0; u < 480; u++)
    {
        img->setPixel(i, u, rawData[i]);
    }
}
ui->label->setPixmap(QPixmap::fromImage(*img));

私はそれを正しくやっていますか?ところで、これらのことをどこで学べばよいか教えていただけますか? ありがとうございました!

4

3 に答える 3

7

全体的には正しいです。QImageは、独自のデータを直接操作できるクラスですが、正しいピクセル形式を使用する必要があります。

もう少し効率的な例:

QImage* img = new QImage(640, 480, QImage::Format_RGB16);
for (int y = 0; y < img->height(); y++)
{
    memcpy(img->scanLine(y), rawData[y], img->bytesPerLine());
}

は 2次元rawData配列です。

于 2013-01-28T13:53:54.887 に答える
0

構文的には、コードは正しいようです。

クラス シグネチャを読み取ると、次の方法で setPixel を呼び出すことができます。

img->setPixel(i, u, QRbg(##FFRRGGBB));

##FFRRGGBBはカラー 4 連です。もちろん、モノクロ 8 ビットのサポートが必要な場合を除きます。

さらに、ネイキッド ポインターの宣言は危険です。次のコードは同等です。

QImage image(640, 480, QImage::Format_something);
QPixmap::fromImage(image);

関数の完了時に適切に割り当てを解除します。

Qt Examplesディレクトリは、機能を検索するのに最適な場所です。また、例が散らばっているので、クラスのドキュメントを熟読してください。

于 2013-01-28T14:00:49.103 に答える