Здравствуйте!
У меня такая задача:
есть клиент, есть сервер. на клиенте есть картинка, которая шлётся на сервер и рассылается всем подключенным клиентам.
Картинка в клиенте сворачивается в буффер так:
void SimpleChatClient::sendMessage()
{
QImage image;
image.load("C:\\test1.png", "PNG");
QByteArray ba;
QBuffer bufer(&ba);
bufer.open(QIODevice::WriteOnly);
image.save(&bufer, "PNG");
imag.loadFromData(bufer.buffer());
socket->write(ba);
bufer.buffer().clear();
bufer.close();
}
на сервере приниамется:
void SimpleChatServer::receiveMessage()
{
QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
QBuffer* buffer = buffers.value(socket);
qint64 bytes = buffer->write(socket->readAll());
buffer->seek(buffer->pos() - bytes);
foreach (QTcpSocket* connection, connections)
{
connection->write(buffer->buffer());
}
buffer->seek(0);
buffer->buffer().clear();
}
и потом возвращемся в клиент:
void SimpleChatClient::receiveMessage()
{
qint64 bytes = buffer->write(socket->readAll());
buffer->seek(buffer->pos() - bytes);
img.loadFromData(buffer->buffer());
if(img.loadFromData(buffer->buffer()),"PNG") // Check if the image was indeed received
qDebug("The image is null. Something failed.");
chat->setPixmap(QPixmap::fromImage(img,0));
buffer->seek(0);
buffer->buffer().clear();
}
buffer описывается в хэдере клиента:
И говорит, что картинка пустая. Сохранял во всех трёх шагах буффер в файл: файлы идентичны и отлично читаются и открываются, как изображения.
если при отправки картинки открыть её после сворачивания в байты (из буффера) то всё нормально открывается и отображается в QLabel. Ведь буффер получается везде одинаковый. почему картинка в не открывается после приёма?
PS
могу приложить полный код.