Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QImage::save() проблема 
V
    Опции темы
toxx
Дата 11.6.2012, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



Добрый день,
есть проблема, реализую алгоритм LSB, меняю последний бит у R G B компонент картинки на биты моего кодируемо изображения.
Потом достаю это изображение.
Проблема в том, что 
1. Если кодировать данные в картинку->сохранять картинку с данными->загружать картинку и раскодировать данных,
получается жесткое искажение данных(пережимает как-то Qt?).

2. Если же не сохранять картинку, то всё отлично раскодировается.

Кодирую-декодирую так для случая 2
Код
 //оригинальнальное изображение, img - вставляемое
#define FORMAT "jpg"
            QImage corruptedImage(imageHelper->algorithmLSB(originalPicture,img,leastBits));
            QImage from(imageHelper->getImageFromLSB(corruptedImage,img.width(),img.height(),leastBits));
            from.save(fn,FORMAT);


Для случая 1 так
Код

#define FORMAT "jpg"
//save
            QImage corruptedImage(imageHelper->algorithmLSB(originalPicture,img,leastBits));
            corruptedImage.save(fn,FORMAT);
// открываю так
            QString fileName = QFileDialog::getOpenFileName(this,
                                          tr("Open File"), QDir::currentPath());
            if (!fileName.isEmpty()) {
                QImage image(fileName);
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"),
                                             tr("Cannot load %1.").arg(fileName));
                    return;
                }
             }
//load decode, img это сохранённая картинка          
            QImage from(imageHelper->getImageFromLSB(image,w,h,leastBits));
            from.save(FROM_LSB,FORMAT);


В чем может быть проблема? 
Если в 1м случае сохранять оригинальную картинку, то она пережимается иногда в 2 раза, иногда на ~100kb.
Хотя изменены мной только компоненты RGB, через setPixel(x,y,QRgb).

Спасибо за любую помощь.

Это сообщение отредактировал(а) toxx - 11.6.2012, 02:15
PM MAIL   Вверх
borisbn
Дата 11.6.2012, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(toxx @  11.6.2012,  02:04 Найти цитируемый пост)
 if (!fileName.isEmpty()) {
                QImage image(fileName);     // <----------------------------------------------
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"),
                                             tr("Cannot load %1.").arg(fileName));
                    return;
                }
             }

в помеченной строке создаётся временный объект QImage, который разрушится при выходе из if (!filename.isEmpty())

Цитата(toxx @  11.6.2012,  02:04 Найти цитируемый пост)
 QImage from(imageHelper->getImageFromLSB(image,w,h,leastBits));

а здесь используется уже какой-то другой image

Это раз.

Сохранение картинки в jpg происходит с искажением (с потерей). Если нужно сохранить картинку один в один - используй BMP или PNG.
Это два.

А вообще - очень сумбурный пост: какие-то куски кода... какие-то два варианта... Я вообще не очень понял, что ты хочешь сделать и как это реализуешь.
Это три.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
toxx
Дата 12.6.2012, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



borisbn
Прошу прощения, пост был действительно сумбурный. Ночью сидел... постараюсь так больше не делать.

Тут
Код

в помеченной строке создаётся временный объект QImage, который разрушится при выходе из if (!filename.isEmpty())


И тут всё очевидно, просто неудачно пост скомпоновал=)
Код

а здесь используется уже какой-то другой image


Вот ответ, не думал что кодирование из jpg в jpg происходит с потерей. Взял BMP всё отлично. Спасибо!
Код

Сохранение картинки в jpg происходит с искажением (с потерей). Если нужно сохранить картинку один в один - используй BMP или PNG.
Это два.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.