用透明的“窗口”创建像素图,复制另一个像素图

时间:2016-01-02 03:54:31

标签: c++ qt

这是示波器。我想要一个圆形的绿色窗户,上面有一个十字线。

如果我直接这样做,我会用黑色填充矩形,在其中绘制一个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 个答案:

答案 0 :(得分:0)

哦,好悲伤。这不仅仅是错误的,它已经破碎了。

以下是您必须做的事情:

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

  5. ......这是模糊的,不透明的,近乎我能说出来的,没有文件记录。

    但它确实如此。它有效。