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 Pen 等效项

Direct2D - 如何绘制尽可能接近 GDI 渲染的文本

为啥 DirectX/DirectWrite/Direct2D 文本渲染不能像 GDI 一样清晰?

Direct2D教程Direct2D已经来了,谁是GDI的终结者?

使用 Direct2D 在非客户区绘图