unsigned char型*データからQImageの構築
-
26-09-2019 - |
質問
私はQImageのオブジェクトに(ポイントGrej FlyCapture2 SDKで撮影)Imageオブジェクトを渡すと問題が発生しました。私は、関数によって画像データに関連付けられたポインタを取得しています:
virtual unsigned char* FlyCapture2::GetData ( )
、次にによってデータをロード
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
は、両方の画像オブジェクトのデータのフォーマットは、8ビット単色です。 BytesPerLineパラメータは、(私はすでにFlyCapture2を保存し、それをチェックしました::画像は、.BMP、その後QImageのにそれをロードするために)画像の幅と同じでなければなりません。
* UCHARする*あなたの問題は、unsigned char型からキャストされたものですか? あなたは、任意の他のアイデアを持っていますか?ピクセルによって画像のピクセルをコピーすると、あまりにも遅いです。
は編集:私は、そのため、FlyCapture2::PIXEL_FORMAT_RGB8
にFlyCaptureによって撮影された画像を変換しています:R = G = B = 8ビット、PGR::SnapShot()
関数内。スナップショット()戻り* constとしてunsigned char
。
そしてここに私Qtの表示機能の一部であります:
unsigned char *const img = PGRSystem->SnapShot();
QImage Img(img, 1024, 768, QImage::Format_RGB888);
QGraphicsScene *Scene = new QGraphicsScene();
Scene->addPixmap(QPixmap::fromImage(Img));
ui.ImageView->setScene(Scene);
ui.ImageView->fitInView(ui.ImageView->itemAt(100,100));
delete [] Scene;
私はまた、ファイルにIMGを保存しようとしましたが、その後、未処理の例外を得ました。私は他のピクセルフォーマット対を試みた(FlyCapture2::PIXEL_FORMAT_RGB
- QImage::RGB88
とFlyCapture2::PIXEL_FORMAT_RGBU32
8とQImage::RGB32
と24ビットRGB)
また、私が使用していますQImageののconstuctorは、カラーテーブルを(QImageのがグレースケールであるかどうかをチェックするとき、私は例外を取得しています)を設定していないことを言及する価値があります。 私は私が推測もう少し助けを必要とします。
解決
最初の事 - QImageのは、ネイティブのグレースケール画像をサポートしていない、あなたが出力として取得しているかのように聞こえる何である - 私はあなたが使用しているどのような形式の引数好奇心旺盛になるようにします。おそらく最も簡単な解決策は、メモリ・inefficentかかわらず、(新しいQByteArrayに)3回、それぞれの値をコピーすることによって、RGBへのあなたのグレースケール画像を拡大することになります。
は、追加の懸念は、使用している特定のQImageのコンストラクタは、ないということであるのありませんを使用すると、確認のGetData(から返されたポインタが)QImageのはoutlivesであればよいので、基礎となるデータをコピーする - または力QImageの、内部的にコピーを作成し使用して、言って、QImageの::コピーします。
他の回答者は、上述のように複数のコードを見ることは、役立つだろう。
他のヒント
あなたの助けのおかげでたくさん、あなたは右の画像フォーマットについてでした。生憎主な問題は、機能間のポインタを渡すことと関連していました。 PGR ::スナップショット()で、私はFlyCapture2 ::イメージを作成した後、私はデータへのポインタを得ていました。 FlyCapture2 ::画像が返されたポインタがBadPtrだったので、機能を終了したときにdetructedました。