簡體   English   中英

創建其中帶有透明“窗口”的像素圖,該像素圖由另一個像素圖組成

[英]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));

我確定我想念什么。 這應該很簡單,對吧?

哦,真可悲。 這不僅是錯誤的,而且已經壞了。

這是您要做的:

  1. 將像素圖清除為完全透明,這是一個神奇的步驟,對最終圖像的像素內容沒有任何意義,除非您這樣做, 否則無效

    m_grdPixmap.fill(QColor::fromRgb(0,0,0,0));

  2. 然后用您想要形成非透明的“窗口包圍”的實際顏色填充它:

    qb = QBrush(QColor::fromRgb(0,0,0,255));
    painter.setBrush(qb);
    painter.drawRect(0,0,w,h);

  3. 然后打出透明橢圓(此處為綠色,但沒有關系):

    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);

  4. 然后在希望“窗口”顯示的實際場景上進行合成:

    painter.begin(&m_scopePixmap);
    painter.drawPixmap(0,0,m_grdPixmap);

...據我所知,這是模糊的,不透明的,並且接近無證。

但是有。 而且有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM