LINUX.ORG.RU

Qt: полупрозрачная картинка


0

0

Здравствуйте!

В $QTDIR/doc/examples/tux есть пример того, как у QWidget'а сделать фоном картинку tux.png
Если tux.png заменить своей картинкой, у которой например все крому самого пингвина будет _полу-прозрачным_, то при запуске ./tux вся эта полупрозрачность пропадает...
---
if ( p.mask() )
w.setMask( *p.mask() );
---
У меня возник вопрос: как оставить эту полупрозрачность? т.е должно быть тоже самое что и в примере, но картинка с Пингвином должена быть например на голубом полупрозрачном фоне...

Ответ на: комментарий от Severus_Zley

>Попробуй сделать прозрачный png

В общем вот картинка которую нужно отрисовать
http://dating.pastime.ru/users/a/tux.png

Если просто заменить исходную картинку на эту то ничего не получится(отрисуется то же что и было)

ЗЫ: если отрисовывать эту картинку на каком-нибудь Виджете(т.е не делая setBackgroundPixmap и т.д, а используя QPainter) то все ок..но нужно чтобы была только одна картинка с Пингвином. Вариант с тем чтоб Виджет сделать прозрачным и на нем уже отрисовывать картинку так же не проходит :( картинка отрисовывается только на непрозрачных участках...

IPFreely ★★
() автор топика

не очень понял, что тебе требуется... но вот кусок кода - тут создается splash screen. картинка images/splash.png - обычный пнг с альфа каналом, нарисованная и сохраненная в photoshop :))

QPixmap pm;
QImage img;
img.setAlphaBuffer(true);
img.load("images/splash.png");
pm.convertFromImage(img,
Qt::AutoColor | Qt::DiffuseDither | Qt::DiffuseAlphaDither);

QBitmap bm;
bm = img.createAlphaMask();
pm.setMask(bm);
QSplashScreen *splash = new QSplashScreen(pm, Qt::WStyle_Customize | Qt::WStyle_NoBorder);

marx
()
Ответ на: комментарий от marx

>не очень понял, что тебе требуется... но вот кусок кода - тут создается splashscreen. картинка images/splash.png - обычный пнг с альфа каналом,нарисованная и сохраненная в photoshop :))

Конечно спасибо! но таких же успехов я добился и сам...без QSplashScreen а с помощью QWidget..

Если взять предложенную мной картинку, то ничего не выходит... получается пингвин на голубом фоне..а этот голубой фон в картинке-прозрачный....чего не видно в предложенном Тобой примере...

---
#include <qapplication.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qbitmap.h>
#include <qstring.h>
#include <qsplashscreen.h>

int main( int argc, char **argv )
{
QApplication a( argc, argv );

QString fn="tux.png";

QPixmap pm;
QImage img;
img.setAlphaBuffer(true);
img.load(fn);
pm.convertFromImage(img, Qt::AutoColor | Qt::DiffuseDither | Qt::DiffuseAlphaDither);

QBitmap bm;
bm = img.createAlphaMask();
pm.setMask(bm);
QSplashScreen *splash = new QSplashScreen(pm, Qt::WStyle_Customize | Qt::WStyle_NoBorder);
splash->show();
return a.exec();
}
---

IPFreely ★★
() автор топика

Блин!! почитав ченжлог для Qt 3.3.0, увидел там следующее
-QPixmap
Support full alpha-maps for paletted (8-bit) images.
Support 16-bit grayscale PNG images with transparency.

жаль...

IPFreely ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.