Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > BMP to Jpeg


Автор: ecspertiza 23.12.2008, 09:07
Вот вопрос как перевести средствами QT BMP в Jpeg? Просто требуется хранить картинки в БД, а в BMP они слишком много весят.

Автор: SABROG 23.12.2008, 11:34
QPixmap::loadFromData(const QByteArray & data, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor)
QPixmap::save (QIODevice * device, const char * format = 0, int quality = -1 ) const 

Первый вариант для загрузки из BLOB'a. Второй для сохранения уже загруженного BMP изображения в выбранном формате в QBuffer.

Код

         QPixmap pixmap;
         QByteArray bytes;
         QBuffer buffer(&bytes);
         buffer.open(QIODevice::WriteOnly);
         pixmap.save(&buffer, "PNG");


Потом этот QByteArray передается в SQL запрос через bind для BLOB поля.

Автор: ecspertiza 23.12.2008, 11:40
Тогда ещё вопрос как проверить разрешение картинки, есть вариант считать её имя, и проверить 3 последних символа, но насколько я знаю формат задаётся не 3 последними буквами а первыми байтами файла, или может символов хватит?


Автор: SABROG 23.12.2008, 11:46
Ты хочешь проверить разрешение до выгрузки картинки из базы ? А так QPixmap::height(), QPixmap::width()

Автор: ecspertiza 23.12.2008, 12:14
Ну ето я неправильно описал, я хочу сделать проверку, при добавлении картинки в базу, если картинка не jpeg то преобразуем её в jpeg и добавляем в базу, под разрешением я имел ввиду последние три символа в имени файла, вот я думаю как проверять формат файла тоесть какой он BMP или JPEG. Есть вариант считать её имя, и проверить 3 последних символа, но я вот думаю насколько это эффективно.

Автор: Alexeis 23.12.2008, 12:31
ecspertiza, все популярные графические форматы имеют сигнатуры, в начале файла. Последовательность байтов определяющая формат. Проверять ее надежнее чем расширение файла, при этом не важен источник данных то ли это реальный файл, то ли просто буфер байтов из неизвестного источника.

Автор: NewDima 23.12.2008, 12:38
это еще при условии, что мы не уверены что данному расширению файла действительно соответствует данный формат изображения. А если уверены и время является критическим ресурсом, то пойдет и по расширению, тем более, если файлов очень много

Автор: SABROG 23.12.2008, 15:21
Цитата(ecspertiza @ 23.12.2008,  12:14)
Ну ето я неправильно описал, я хочу сделать проверку, при добавлении картинки в базу, если картинка не jpeg то преобразуем её в jpeg и добавляем в базу, под разрешением я имел ввиду последние три символа в имени файла, вот я думаю как проверять формат файла тоесть какой он BMP или JPEG. Есть вариант считать её имя, и проверить 3 последних символа, но я вот думаю насколько это эффективно.

Если тебе удалось загрузить картинку через QPixmap, то она уже не имеет формата, это просто картинка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)