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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обратить нужный цвет в альфа канал.  (Прочитано 8164 раз)
TukiNov
Гость
« : Март 12, 2009, 16:54 »

Приветствую всех Улыбающийся
Такая задачка Улыбающийся есть изображение RGB, в нем доминирует цвет RGB(200, 204, 200). Нужно его обратить в альфа канал.
У меня идея такая, пробежаться по пикселам, вытащить цвет каждого пиксела, и если цвета совпадают, обратить этот цвет в альфа канал. Вот только что то я встрял на этом Улыбающийся
Код:
QImage fragment( "test.png" );
    int w = fragment.width();
    int h = fragment.height();
    for( int x = 0; x < w; ++x )
      for( int y = 0; y < h; ++y ){
        QRgb rgb = fragment.pixel( x, y );
        int red = qRed( rgb );
        int green = qGreen( rgb );
        int blue = qBlue( rgb );
        QColor color( red, green, blue );
        if( red == 200 && green == 204 && blue == 200 ){
          color.setAlpha( 100 );
        }
      }
а как дальше понятия не имею Улыбающийся Может есть другой способ ? Улыбающийся
Заранее спасибо Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Март 12, 2009, 18:12 »

посмотри:
QImage QImage::createMaskFromColor ( QRgb color, Qt::MaskMode mode = Qt::MaskInColor ) const
QImage QImage::createAlphaMask ( Qt::ImageConversionFlags flags = Qt::AutoColor ) const
Записан

Юра.
TukiNov
Гость
« Ответ #2 : Март 13, 2009, 10:27 »

не пашет. Назначение первой функции в обще не понятно. А вторая функция работает только с ARGB.
Записан
TukiNov
Гость
« Ответ #3 : Март 13, 2009, 11:04 »

Усё, проблема решена :
Код:
QImage fragment( exampleObject->size(), QImage::Format_ARGB32 );
    fragment = exampleObject->copy( 30, 277, 110, 102 );

    QPixmap alphaPixmap( QSize( fragment.size() ) );
    alphaPixmap.fill( QColor( 200, 204, 200 ) );

    QPixmap fragmentAlpha( fragment );
    fragmentAlpha.setAlphaChannel( alphaPixmap );
    fragmentAlpha.save( "alfa.png", "PNG", -1 );
Записан
TukiNov
Гость
« Ответ #4 : Март 16, 2009, 20:15 »

Обшибся Улыбающийся код выше делает все изображение полупрозрачным. След код устраняет этот недостаток Улыбающийся
Код:
QImage fragment( exampleObject->size(), QImage::Format_ARGB32 );
    fragment = exampleObject->copy( 30, 277, 110, 102 );

    //Подключаем альфа канал
    QPixmap alpha( QSize( fragment.size() ) );
    alpha.fill( QColor( 255,255,255 ) );
    fragment.setAlphaChannel( alpha );

    int w = fragment.width();
    int h = fragment.height();
    for( int y = 0; y < h; ++y )
      for( int x = 0; x < w; ++x ){
        QRgb rgb = fragment.pixel( x, y );
        int red = qRed( rgb );
        int green = qGreen( rgb );
        int blue = qBlue( rgb );
        //в if прописываем цвет фона
        if( red == 200 && green == 204 && blue == 200 ){
          fragment.setPixel( x, y, qRgba( 255, 255, 255, 0 ) );
        } else {
          fragment.setPixel( x, y, qRgba( red, green, blue, 255 ) );
        }
      }
Записан
Xopxe
Гость
« Ответ #5 : Октябрь 01, 2010, 23:39 »

lit-uriy, спасибо работает.
Для тех кто в танке

Код:
QPixmap alfaPixmap;
alfaPixmap=Pixmap->createMaskFromColor(QColor(0,255,255),Qt::MaskOutColor);
Pixmap->setAlphaChannel(alfaPixmap);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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