Russian Qt Forum

Qt => Общие вопросы => Тема начата: OS2 от Март 25, 2011, 15:36



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


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: merke от Март 25, 2011, 16:01
Не знаю есть ли готовое решение, но если бы я такое не нашел, то обошел бы картинку попиксельно с заменой необходимых цветов.


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: GreatSnake от Март 25, 2011, 16:17
Попробуй QImage::colorTable(), QImage::setColorTable().


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: OS2 от Март 25, 2011, 18:00
2 GreatSnake
А по подробней можно?


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: GreatSnake от Март 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 );


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: OS2 от Март 25, 2011, 19:19
Интересно...у меня img.colorTable() возвращает: 0.


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: merke от Март 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);
           }
       }
   }


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: ufna от Март 28, 2011, 13:40
А оно как бэ и должно ноль возвращать, доки то читаем? :)


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: Mashkovd от Март 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??


Название: Re: Замена одного цвета на другой в png файле, средствами Qt
Отправлено: GreatSnake от Март 28, 2011, 14:35
Цитировать
А оно как бэ и должно ноль возвращать, доки то читаем?
Это я не проверив ввёл народ в заблуждение :(
colorTable() используется только для монохромных и 8-битных форматов.