image transfering[SOLVED]
-
hello,I'm studying about image transfering on Qt now.
but it is difficult to finish making program.so please help me.
now I'm thinking the way below:
[server side]
1.first get image data of web cam by OpenCV's function. cvCaptureFromCam()
2.change the image data to QByteArray by QByteArray(img->imageData, img->imageSize)
3.add image's length and height data to QByteArray by append()
4.transfer the QByteArray Data by writeDatagram()
[client side]
1.get data by readDatagram()
2.search length data and heidht data by QByteArray's function indexOf()
3.change it to char pointer(char *) by
char *cdata;
cdata = store.data(); (store is QByteArray Data = image)
4.change it to QImage by function(1)
5.change it to QPixmap
6.add it to Qlabelplease,tell me how to do.
function(1):
QImage* MainWindow::char2QImage(char *cdata)
{
int channels = 3;
QImage *qimg = new QImage(width_data, height_data, QImage::Format_ARGB32);
char *data = cdata;for (int y = 0; y < height_data; y++, data += width_data * channels) { for (int x = 0; x < width_data; x++) { char r, g, b, a = 0; if (channels == 1) { r = data[x * channels]; g = data[x * channels]; b = data[x * channels]; } else if (channels == 3 || channels == 4) { b = data[x * channels]; g = data[x * channels + 1]; r = data[x * channels + 2]; } if (channels == 4) { a = data[x * channels + 3]; qimg->setPixel(x, y, qRgba(r, g, b, a)); } else { qimg->setPixel(x, y, qRgb(r, g, b)); } } } return qimg;
}
-
Hi,
Why not directly send a QImage ? That would avoid having to play with raw data of unknown size
-
@SGaist
Thank you for advising.I don't know the way to transfer the QImage data from server to client.
so, I use this method.
is it possible to transfer the QImage on UDPsocket communication? -
Hi,
You can use
QDataStream
to write/read a QImage on a QByteArray -
Thank you for telling me.
I will try to use the QDataStream.
-
To add to @mcosta, if you don't want to risk packet loss, then you should use TCP so QTcpSocket/Server
-
Thank you for advising.
I will try it.