我正在使用分层窗口,在屏幕上绘制圆角矩形。但是,我想要平滑边缘。我认为需要使用alpha混合。是否有一种使用GDI实现这个的方法?
使用CreateDIBSection函数创建一个32bpp位图。在BITMAPINFOHEADER中填充信息,使用预乘alpha通道填充alpha通道即可完成。
AlphaBlend是用于实际混合带有alpha通道的32bpp位图的API。
有没有可能使用GDI+代替GDI?它支持抗锯齿和透明度。
CImage::AlphaBlend
时使用的是 GDI+。 - sergiol使用GDI调用并没有简单的方式来进行这样的绘图。你所需要的不仅仅是阿尔法混合:你需要反锯齿处理。通常情况下,这需要在更高分辨率下绘制你所需的内容,然后再进行缩放。
我过去解决类似问题的方法是使用一个美术程序,将我想要的任何形状(例如圆角)以黑白方式画大。当我想要绘制它时,我会将黑白位图按比例缩放到所需大小(使用Code Project的缩放类的变体)。这给了我一张灰度图像,我可以将其用作阿尔法通道,然后通过调用Win32函数AlphaBlend或使用DIBSection并手动更改适当的像素来进行阿尔法混合。
另一种方法是分配一个大约比最终结果大四倍的DIBSection,向其中绘制,然后使用上述缩放类将其缩小:从较大的图像进行缩放将产生适当的平滑效果。
如果所有这些听起来都需要花费很多时间:那么确实如此。
编辑:回答这个问题的标题:您可以通过调用CreateDIBSection创建带有Alpha通道的位图。不过,仅仅这样做是不够的,我认为。