Необходимо с удалённого сервера получить изображение и отобразить его, передача происходит по UDP.
Изображение передаётся частями в следующем формате:
- код пакета (2 байта)
- порядковый номер пакета (2 байта)
- размер данных в пакете (2 байта)
- данные
При получении выполняется следующий код:
Код: Выделить всё
QDataStream in(&answer, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_4_7);
quint8 data[5];
in >> data[0] >> data[1] >> data[2] >> data[3] >> data[4];
............................
quint8 data1;
in >> data1;
char *jpeg = new char[(data[4] << 8) | data1];
in.readRawData(jpeg, (data[4] << 8) | data1);
image->fill_data((data[2] << 8) | data[3],
(data[4] << 8) | data1,
jpeg);
delete jpeg;
Сборка изображения из частей:
Код: Выделить всё
QByteArray jpg;
jpg.reserve(frame_size); //известный размер изображения
void Image::fill_data(const quint16 num, const quint16 size, const char *data)
{
jpg.append(data);
next_packet(num, size); // учёт пришедших частей
}
Отображения изображения:
Код: Выделить всё
QPixmap pixmap;
void Image::view_image()
{
if (pixmap.loadFromData(jpg)) {
pixmap.scaled(frame_width, frame_height);
ui->pushButton->setIcon(QIcon(pixmap));
} else
ui->pushButton->setText(QString(tr("error load image")));
setWindowTitle(QString("%1 bytes (%2 packets) in %3 msec").
arg(frame_size, 0, 10).
arg(num_packet, 0, 10).
arg(timer.elapsed(), 0, 10));
show();
}
Судя по отладочному выводу я получаю все пакеты с данными, но изображение не появляется, только кнопка с надписью "error load image".
Подскажите в чём ошибка?
Спасибо.