在我的應用中,我通過QTcpSocket
以字節數組的形式從Android設備接收格式爲JPEG
的圖像。無法在發佈模式下從字節數組加載QImage
當我在我的開發PC上運行這個應用程序時,它就像一個魅力(無論是在調試和發佈模式)。但是,我無法從未安裝Qt的另一臺PC上的字節數組中加載QImage
。
我在Qt中爲我的平臺(Windows x64,msvc_2015_64)包含了所有* .dll文件,並且還安裝了Visual Studio C++ Redistributable 2015.我的應用程序啓動正常(不給出任何錯誤,某些* .dll文件是失蹤)。但是QImage
一直都是空的。
首先,我認爲字節數組根本沒有被接收到,所以我檢查了它的大小,發現它被正確接收。
我使用這個代碼從uchar
字節加載QImage
:
void handleImageBytes(uchar *bytes, qint64 length)
{
QImage image;
image.loadFromData(bytes, length, "JPEG");
emit frameReady(image);
}
我收到這些字節從QTcpSocket
:
void handleReadyRead()
{
if(this->incomingFrameLength==0){
QString data = this->client->readAll();
this->incomingFrameLength = data.toInt();
this->client->write("ok");
qDebug()<<QString("Received frame length: %1").arg(this->incomingFrameLength);
return;
}
if(this->incomingFrameLength!=0 && this->client->bytesAvailable()<this->incomingFrameLength)
return;
uchar* data = (uchar*)malloc(this->incomingFrameLength+256);
qint64 len = this->client->read((char*)data, this->incomingFrameLength+256);
qDebug() << QString("Received %1 bytes").arg(len);
handleImageBytes(data, len);
this->incomingFrameLength=0;
this->client->write("received");
qDebug()<<QString("Received frame of length %1").arg(len);
free(data);
}
正如你看到的,第一我收到的大小圖像作爲字節數組的長度。 然後我等待在QTcpSocket
的緩衝區中收到並準備好所有需要的字節。然後,我創建指向具有足夠大小的字節數組的指針,將傳入字節加載到該數組,並從上面調用handleImageBytes
方法。
這一切工作正常我的開發電腦(Windows 7 x64,Qt 5.7,msvc_2015_64)。 但是,當我將包含所有必需的* .dll文件的發佈代碼移動到未安裝Qt的其他PC時,從字節數組加載圖像不起作用。
如何解決這個問題?
可以嘗試在發佈模式下打印出某些內容,以便您可以看到發生了什麼。 –
@HảiPhạmLê我已經打印了傳入字節數組的大小,並且它在調試和發佈模式下以及在開發PC和其他PC中都可以保存。 – Umriyaev
必須是這個或類似的問題:https://stackoverflow.com/questions/6724606/include-the-jpeg-plugin-in-my-application – AlexanderVX