2009-08-16 46 views
4

是否有wxWidget办法做α混合操作,诸如位图与其他位图的RGB的α相乘,以生成新的图像(例如渲染相片作为抗混叠的圆形形状) 。的wxWidgets - 阿尔法混合

+0

我会很想知道如何做到这一点。 Atm我使用区域来获得扎实的alpha工作。 – Lodle 2009-08-16 12:39:01

回答

2

虽然我没有完成alpha混合我自己,我相信wxGraphicContext是你以后。

http://docs.wxwidgets.org/stable/wx_wxgraphicscontext.html

我已经用我的Paint事件处理程序如下得到无闪烁绘制成图形上下文(在Win32):

void OnPaint(wxPaintEvent& e) 
{ 
    wxBufferedPaintDC dc(this);   
    wxGraphicsContext* gdc = wxGraphicsContext::Create(dc); 
    // you drawing code here 
} 

编辑:此电子邮件跟踪可能会提供一些更深入的了解:

http://www.nabble.com/Is-alpha-blending-implemented-when-using-DC's--td17183159.html

+0

嗯,这不完全是。假设我有一个方形图像。 DC中的blit方法或wxGraphicsContext中的等效方法仅允许您呈现整个位图或矩形部分。我将如何能够渲染我的原始图像的圆形区域。 通常我会渲染一个圆形到目标缓冲区,确保它被预先清除到255 alpha。然后,我只是将alpha图像与缓冲区乘以alpha值与各个RGB组件进行混合。 我想我会手动执行此操作...我将发布实现。 – rui 2009-08-17 12:58:04

+0

您是否确认绘图时wxGraphicsContext的DrawBitmap方法不注意Alpha通道?作为一个完整的旁观者,您还可以使用OpenGL绘制图像,因为wxWidgets具有OpenGL画布。 – 2009-08-17 14:14:30

+0

这是我想要工作的代码: wxBitmap my_image = LoadSomePngWithNoAlpha(); wxBitmap缓冲区; wxMemoryDc dc = new wxMemoryDc(buffer); dc.SetBrush(wxCoulor(0,0,0,0)); dc.Clear(); dc.BlitBitmapAsCircle(bitmap,wxPoint(5,5),42.0); 为了完成这个最后一步,你通常会绘制一个正常的圆,并将alpha设置为255,然后如果我混合了与缓冲区呈直角的wxBitmap,则只会复制alpha == 255位,以便结束随着Png图像的圆形裁剪部分。 – rui 2009-08-17 14:58:35