私は、ネットワーク経由でJPGをそれらのイメージを表示するはずのGUIクライアントに送信するソフトウェアを持っています。基本的にqtウィンドウに表示したいのですが、qtが連続JPGを表示する方法に問題があります。私はファイルに印刷してイメージを正しく取得しているかどうかを確認するためのテストを行いました。ここでの主なコードは次のとおりQTを使用してカメラからのストリーミングイメージを表示する
int main(int argc, char *argv[]) {
// initialize resources, if needed
// Q_INIT_RESOURCE(resfile);
QApplication app(argc, argv);
CameraWindow cw;
cw.show();
//app.setActiveWindow(&cw);
cw.getData(); // this paints the window
return app.exec();
}
ここでウィジェットを初期化するコードは次のとおり
class CameraWindow : public QDialog {
Q_OBJECT
public:
bool serverConnected;
void getData();
CameraWindow()
{
imgl = new QLabel;
widget.scrollImage->setWidget(imgl);
widget.scrollImage->setBackgroundRole(QPalette::Dark);
}
QLabel *imgl;
virtual ~CameraWindow();
private:
Ui::CameraWindow widget;
};
これは無限の内側にある画面に画像をペイントすることになっているコードの要部でありますループ:メインから呼び出さ
のgetData():
while (myrval < Header.imageSize) {
myrval = myrval + recv(msgsock, (char*) ((int) buff + myrval),
Header.imageSize- myrval, 0);
}
//buff contains the jpg at this point
QPixmap imgjpg;
imgjpg.loadFromData((const unsigned char*)buff, Header.imageSize, "JPG");
//scroll image is the parent that displays child
//in this case, the label
imgl->setPixmap(imgjpg);
私はこれがために働くようになりましたファイルからロードされた画像は1つだけですが、ストリーミングイメージのセットに対して同じメソッドを使用すると、これは機能しません。私はQtが新しく、微妙な間違いがあると確信しています。
多くの感謝!
あなたの 'recv()'呼び出しをどのようにループしてイメージをロードしていますか? (これら2つのタスクを別々の機能に分けることができますか?) – sarnold