GDI InvertRect 的 Direct2D 等效项
Posted
技术标签:
【中文标题】GDI InvertRect 的 Direct2D 等效项【英文标题】:Direct2D equivalent of GDI InvertRect 【发布时间】:2019-05-13 09:41:44 【问题描述】:我需要将相对复杂程序的 GDI 方法调用转换为等效的 Direct2D 代码。对于大多数 GDI 函数,我可以编写等效代码。但我还没有找到 InvertRect 的任何等效代码。由于绘图是动态完成的,我无法创建(否则将成为性能瓶颈)WICBitmap 来获取像素并反转颜色。
谁能给我一个好的解决方案,好吗?
【问题讨论】:
对,这正是你找不到同等产品的原因,Direct2D 也不想做这种昂贵的事情。重构您的绘图代码,以便您可以重现这些像素,但现在使用一组不同的颜色。作为奖励,考虑到 InvertRect() 产生的颜色通常很糟糕,它应该更令人赏心悦目。 【参考方案1】:如果你想反转一个已经绘制好的区域,相信你可以使用CreateEffect(CLSID_D2D1Flood)
创建一个填充纯色的效果,然后将效果的颜色参数设置为白色,然后使用ID2D1DeviceContext::DrawImage
与该效果并使用D2D1_COMPOSITE_MODE_XOR
作为compositeMode
参数。
(您可能还需要使用透明白色,现在我想到了...假设XOR也对alpha通道进行操作。您可能需要进行实验。另外,它可能不会工作,我没试过。)
【讨论】:
【参考方案2】:您可以使用Direct2D Effect。
有Built-in Effects,你可以使用Invert effect。
【讨论】:
以上是关于GDI InvertRect 的 Direct2D 等效项的主要内容,如果未能解决你的问题,请参考以下文章
使用 Direct2D GdiInteropRenderTarget 未正确呈现 GDI 内容
Direct2D - 如何绘制尽可能接近 GDI 渲染的文本
为啥 DirectX/DirectWrite/Direct2D 文本渲染不能像 GDI 一样清晰?