[英]Create pixmap with transparent “window” in it, composite of another pixmap
這是一個示波器。 我想要一個綠色的圓形窗口,上面有一個掩模版。
如果直接執行此操作,則將黑色填充為矩形,在其中繪制0-alpha橢圓,然后簡單地將其合成到其他像素圖上,在該像素圖上,將范圍描跡繪制在綠色上后像素設置為綠色像素圖。
它似乎不是那樣工作的。 我可以用透明度填充像素圖:
m_grdPixmap.fill(Qt::transparent);
當然可以,我得到了完全透明的像素圖。 即使使用rgba構造一支筆,我似乎也無法在其上畫任何東西。 它頑固地保持透明。
如果我反過來做,那就用黑色填充它:
m_grdPixmap.fill(QColor::fromRgb(0, 0, 0));
然后嘗試使用(我希望是)透明筆在其上畫一個橢圓,它頑固地保持不透明:
painter.setPen(qRgba(0,0,0,0));
...要么...
painter.setPen(qRgba(0,0,0,255));
我確定我想念什么。 這應該很簡單,對吧?
哦,真可悲。 這不僅是錯誤的,而且已經壞了。
這是您要做的:
將像素圖清除為完全透明,這是一個神奇的步驟,對最終圖像的像素內容沒有任何意義,除非您不這樣做, 否則無效 :
m_grdPixmap.fill(QColor::fromRgb(0,0,0,0));
然后用您想要形成非透明的“窗口包圍”的實際顏色填充它:
qb = QBrush(QColor::fromRgb(0,0,0,255));
painter.setBrush(qb);
painter.drawRect(0,0,w,h);
然后打出透明橢圓(此處為綠色,但沒有關系):
qb = QBrush(QColor::fromRgb(0,255,0,0));
painter.setOpacity(1.0);
painter.setBrush(qb);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.drawEllipse(center,(int)aw,(int)aw);
然后在希望“窗口”顯示的實際場景上進行合成:
painter.begin(&m_scopePixmap);
painter.drawPixmap(0,0,m_grdPixmap);
...據我所知,這是模糊的,不透明的,並且接近無證。
但是有。 而且有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.