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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Замена одного цвета на другой в png файле, средствами Qt  (Прочитано 10831 раз)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« : Март 25, 2011, 15:36 »

Всем доброго времени суток!
Возникла такая проблема: имеется PNG файл в ресурсах Qt приложения. PNG - цветной, с прозрачностью.
Нужно заменить один цвет, скажем: QColor(222,222,222), на другой, скажем: QColor(111,111,111), имеется ли в Qt такая возможность? Подскажите, плиз, буду очень признателен!
Записан
merke
Гость
« Ответ #1 : Март 25, 2011, 16:01 »

Не знаю есть ли готовое решение, но если бы я такое не нашел, то обошел бы картинку попиксельно с заменой необходимых цветов.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Март 25, 2011, 16:17 »

Попробуй QImage::colorTable(), QImage::setColorTable().
Записан

Qt 5.11/4.8.7 (X11/Win)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #3 : Март 25, 2011, 18:00 »

2 GreatSnake
А по подробней можно?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 25, 2011, 18:20 »

Цитировать
А по подробней можно?
Как-то так:
Код
C++ (Qt)
QImage img( "file.png" );
QVector< QRgb > ct( img.colorTable () );
QRgb fc = QColor( 222, 222, 222 ).toRgb();
QRgb tc = QColor( 111, 111, 111 ).toRgb();
 
for( int i = 0; i < ct.count(); i++ )
   if( ct[i] == fc )
   {
       ct[i] = tc;
       break;
   }
img.setColorTable( ct );
« Последнее редактирование: Март 25, 2011, 18:43 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #5 : Март 25, 2011, 19:19 »

Интересно...у меня img.colorTable() возвращает: 0.
Записан
merke
Гость
« Ответ #6 : Март 26, 2011, 06:32 »

У меня тоже ноль возвращает...

Попробуй вот так:

Код
C++ (Qt)
   QImage img("C:\\hi.jpg");
 
   QRgb fc = qRgb(0,0,0);
   QRgb tc = qRgb(255,0,255);
 
   for (int i = 0; i < img.width(); i++)
   {
       for (int j = 0; j < img.height(); j++)
       {
           if (img.pixel(i,j) == qRgb(0,0,0))
           {
               img.setPixel(i,j, tc);
           }
       }
   }
Записан
ufna
Гость
« Ответ #7 : Март 28, 2011, 13:40 »

А оно как бэ и должно ноль возвращать, доки то читаем? Улыбающийся
Записан
Mashkovd
Гость
« Ответ #8 : Март 28, 2011, 14:27 »

Код:
QImage img( "file.png" );
QVector< QRgb > ct( img.colorTable () );
QRgb fc = QColor( 222, 222, 222 ).toRgb();
QRgb tc = QColor( 111, 111, 111 ).toRgb();
 
for( int i = 0; i < ct.count(); i++ )
    if( ct[i] == fc )
    {
        ct[i] = tc;
        break;
    }
img.setColorTable( ct );

Вот этот вариант не работает?

Допустим у меня имеется картинка со сплошным белым цветом RGB(0,0,0) и прозрачным фоном. Я хочу этот цвет каждого белого пикселя поменять на, допустим, красный.

Чтобы использовать ColorTable. Мне необходимо добавить в него белый и прозрачный цвет, а затем белый поменять на красный.

Так?

"Returns a list of the colors contained in the image's color table, or an empty list if the image does not have a color table"

Это означает, что по умолчанию для png colortable = 0??
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 28, 2011, 14:35 »

Цитировать
А оно как бэ и должно ноль возвращать, доки то читаем?
Это я не проверив ввёл народ в заблуждение Грустный
colorTable() используется только для монохромных и 8-битных форматов.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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