crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как рисовать на QImage с прозрачностью?
Rocky
  опции профиля:
сообщение 4.2.2010, 19:43
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Всем привет!
вот тут http://www.forum.crossplatform.ru/index.php?showtopic=4154 Litkevich Yuriy выложил пример AeroButton. В программе сделал кнопки примерно также. Но чтука в том что под виндой эти кнопки получаются с идеально на мой взгляд ровными обводами засчет антиалайзинга.. А вот под линуксом они ужасны. Вычитал, что в иксах нужно для достижения такого же результат включить какую-то опцию отрисовки. Но есть универсальный способ: рисование на QImage (т.е. как бы использование его движка, а не "движка" ОС). Вот делаю как в книге написано =)

void CRoundButton::paintEvent(QPaintEvent *pEvent)
{
    

    QImage oImage(this->size(), QImage::Format_ARGB32_Premultiplied);
    QPainter oImagePainter(&oImage);
    oImagePainter.initFrom(this);
    oImagePainter.setRenderHint(QPainter::Antialiasing, true);
    oImagePainter.eraseRect(this->rect());
//тут отрисовка по сути таже что и в примере aerobutton (только на oImagePainter)
//и потом
    oImagePainter.end();

    QPainter oWidgetPainter(this);
    oWidgetPainter.drawImage(0, 0, oImage);


Кнопки рисуются, причем прозрачные... но вот по краям виден белый прямоугольный фон. Вот пример:



Как это можно победить? Пробовал играться с QPainter::CompositionMode, максимально только к этому беломы фону прозрачность добавляется....но сам он не исчезает естественно...

Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 9:36