Russian Qt Forum

Qt => Вопросы новичков => Тема начата: wester от Август 08, 2012, 18:42



Название: qimage.pixel() и gif
Отправлено: 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. Все работает. Прикрепляю картинку, с которой проблема



Название: Re: qimage.pixel() и gif
Отправлено: LisandreL от Август 08, 2012, 22:03
Видимо альфа-канал неправильно отрабатывается.
То есть как бы картинка вся чёрная, но некоторые пикселы прозрачные, а некоторые нет (что и не отображено).
Маска прозрачности, судя по всему, создаётся правильно, так что данные не откинуты при загрузке.


Название: Re: qimage.pixel() и gif
Отправлено: andrew.k от Август 08, 2012, 23:01
попробуй QColor::fromRgba(image.pixel(i,4));


Название: Re: qimage.pixel() и gif
Отправлено: wester от Август 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();