Russian Qt Forum
Ноябрь 25, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qimage.pixel() и gif  (Прочитано 3112 раз)
wester
Гость
« : Август 08, 2012, 18:42 »

Доброго времени суток.
Есть статичный gif и код для получения пикселя
Код
C++ (Qt)
QImage image;
   image.load("ready.gif");
//   image.load("g://1.jpg");
   qDebug()<<image.size();  
   for(int i = 0 ; i < 64 ; ++i)
   {
       QColor c = QColor::fromRgb(image.pixel(i,4));
       qDebug()<<c;
   }
проблема в том, что для gif цвет пикселя не возвращается. Хотя размер картинки возвращается верный. В окно отладки в цикле for пишется QColor(ARGB 1, 0, 0, 0) . С jpg все работает.
Пробовал прописать путь к папке плагинов в main.cpp. Пробовал просто кинуть dll (qgifd4.dll + qgifd.dll) в папку exe. Неудача.

upd:
попробовал на другом gif. Все работает. Прикрепляю картинку, с которой проблема

« Последнее редактирование: Август 08, 2012, 21:23 от wester » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 08, 2012, 22:03 »

Видимо альфа-канал неправильно отрабатывается.
То есть как бы картинка вся чёрная, но некоторые пикселы прозрачные, а некоторые нет (что и не отображено).
Маска прозрачности, судя по всему, создаётся правильно, так что данные не откинуты при загрузке.
Записан
andrew.k
Гость
« Ответ #2 : Август 08, 2012, 23:01 »

попробуй QColor::fromRgba(image.pixel(i,4));
Записан
wester
Гость
« Ответ #3 : Август 08, 2012, 23:09 »

andrew.k
Код воспроизводящий ошибку. В первом случае получаю 0, во втором 255
Код
C++ (Qt)
QColor c = QColor::fromRgb(imageJpg.pixel(2,5));
   QColor c2 = QColor::fromRgba(imageGif.pixel(2,5));
Почему так происходит не понял, пересмотрел много тем, но так и не прояснилось


LisandreL
Спасибо про подсказку про альфа канал! И не думал о подобном.
тут решение проблемы http://stackoverflow.com/questions/1549634/qt-qimage-always-saves-transparent-color-as-black
И соответственно мой код, решающий проблему
Код
C++ (Qt)
QImage image("ready.gif","GIF");
 
   QImage image2(160,64,QImage::Format_RGB32); // только конструктор поменял
   image2.fill(QColor(Qt::white).rgb());
   QPainter painter(&image2);
   painter.drawImage(0, 0, image);
   image2.save("somefile.jpg", "JPG");
 
   QImage imageJpg("somefile.jpg", "JPG");
 
  QColor c = QColor::fromRgb(imageJpg.pixel(2,3));
   qDebug()<<c.black();
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 22.