Сжатие и сериализация QImage по сети и знание заранее сжатого размера - PullRequest
0 голосов
/ 29 апреля 2011

Я отправляю несколько MessagePacket и ScreenPacket по сети. но за всеми этими пакетами следует CommonHeaderPacket, который сообщает тип, размер, идентификатор, время и контрольную сумму предстоящего пакета. Поэтому мне нужно знать размер пакета перед отправкой.
ScreenPacket имеет _image:QImage (jpeg), который также будет сжат и сериализован по сети. Я могу сделать это через QImageWriter при отправке через сокет. Но перед отправкой ScreenPacket мне нужно отправить CommonHeaderPacket, который включает size. так как я могу узнать размер заранее? поскольку у QImage нет метода setQuality() или setCompression().
Я не хочу писать это во временном потоке, чтобы знать размер заранее. так что еще может быть способ узнать размер заранее.

Резюме

QImage не имеет setCompression или setQuality метода. QImageWriter имеет. Но мне нужно знать ByteSize, прежде чем писать. Размер байта зависит от сжатия и качества.
например Мне нужно QImage, чтобы быть сохраненным в другой Persistent storable Object с изменением Quality, Compression. без дискового пространства.

1 Ответ

0 голосов
/ 29 апреля 2011

Поможет ли вам использовать QImageWriter для записи в QBuffer?Таким образом, вы избежите перегрузки диска и получите доступ к QByteArray, чтобы получить его размер и данные, чтобы вставить их прямо в сетевой поток.Поэтому вам придется кодировать JPEG еще только один раз.

...