使用 MFC 的 Direct2D 透明度
Direct2D Transparency With MFC
我希望创建一个具有透明区域的子框架(CWnd子类)。
但是,我似乎无法让透明度部分正常工作。据我了解,在使用 D2D1_ALPHA_MODE_IGNORE
标志创建ID2D1HwndRenderTarget
时,我需要启用透明度(如此处所示)但是,我不以这种方式创建呈现器目标。相反,我在OnCreate()
方法中使用EnableD2DSupport()
。当我尝试使用不透明度设置为 0.0 的颜色清除CHwndRenderTarget::Clear(ColorF)
渲染目标时,不透明度被忽略。我在处理AFX_WM_DRAW2D
消息的函数中执行此操作,渲染目标取自LPARAM
。
关于如何让透明度为此工作的任何想法?
D2D1_ALPHA_MODE_IGNORE
的意思是它所说的 - 忽略 alpha 通道(图纸总是不透明的)。SO问题,你已经链接了相反的问题,当图纸始终是透明的时。
如我所见,EnableD2DSupport()
创建了一个 ID2D1HwndRenderTarget
,但很可能带有D2D1_ALPHA_MODE_IGNORE
标志。您需要D2D1_ALPHA_MODE_PREMULTIPLIED
或D2D1_ALPHA_MODE_STRAIGHT
,以便您可以使用 alpha 通道。
如果可能,请使用正确的 alpha 模式手动创建ID2D1HwndRenderTarget
,然后使用CHwndRenderTarget::Attach
将其附加到CHwndRenderTarget
另一种方式(我会选择)是Direct2D 1.1方式(更准确地说 - ID2D1DeviceContext),手动管理整个绘图过程。有关一些指导,请查看此答案。
- 如何在 Direct2D 窗口中正确初始化 Directwrite IDWriteTextLayout
- 没有专用显卡的 Direct2D 与 GDI+
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- Vulkan是否需要在多个具有透明度的平局调用之间进行同步
- 如何在 direct2d 中使用随其窗口重新缩放的效果绘制图像
- 像素与透明度叠加
- Direct2D 如何打开共享纹理
- 使用 Direct2D 绘制 SVG 路径:无法绘制椭圆弧
- 如何从透明度计算不透明度?
- 最接近Direct2D/DirectWrite的跨平台替代方案?
- 遵循官方 Direct2D 示例,但出现访问冲突错误
- 在 openFrameworks 上设置图像的透明度
- Direct2D 错误 - d2d1_1.h 充满了错误
- 在 Direct2D 绘图中,调整窗口大小后尺寸会更改
- 启动时不显示 Direct2D DC 上下文呈现的图像
- glcolor4f-绘制时无法获得完全不透明度
- 将DirectX 11后缓冲区渲染到Direct2D
- C++ Direct2D - 从笔记本电脑移动正弦文件后出现链接器错误 2019
- VTK抽象选择器,用于不同不透明度值的多个参与者
- 使用 MFC 的 Direct2D 透明度