[返回博客](/cn/blog) # 常见问题：如何在显示期间从我的应用程序修改绘制的颜色？

Andrew Markovich 十月 24, 2017 [\#rendering](/cn/blog/tag/rendering) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

有时，渲染应用程序需要在渲染期间修改绘制的颜色，而无需长时间更新几何缓存。例如，此功能有助于使用校正的调色板、反转颜色、灰度或单色渲染模式、颜色伽马、亮度对比度校正来绘制图形。此功能适用于所有主要的 Teigha 矢量化模块（“WinGDI.txv”、“WinOpenGL.txv”、“WinDirectX.txv”和“WinGLES2.txv”）。

包含颜色转换器接口：

```
// 1) Include color conversion callback interface
#include "Teigha/Kernel/Extensions/ExRender/ExColorConverterCallback.h"

```

实现您自己的颜色转换函数：

```
// 2) Define your own color conversion callback method. In this example we invert R, G and B color components.
class UserDefColorConversionCallback : public OdColorConverterCallback
{
  virtual ODCOLORREF convert(ODCOLORREF originalColor)
  {
    return ODRGBA(~ODGETRED(originalColor), ~ODGETGREEN(originalColor), ~ODGETBLUE(originalColor), ODGETALPHA(originalColor));
  }
};

```

使用 OdGsDevice 属性将转换后的颜色附加到 Teigha 矢量化模块：

```
// 3) Construct and attach user-defined color conversion callback to Teigha vectorization device using device properties.
void attachColorConverter(OdGsDevice *pGsDevice)
{
  if (pGsDevice && pGsDevice->properties() && pGsDevice->properties()->has(OD_T("ColorConverter")))
  {
    OdColorConverterCallbackPtr pCC = OdRxObjectImpl<UserDefColorConversionCallback>::createObject()
    pGsDevice->properties()->putAt(OD_T("ColorConverter"), pCC);
  }
}

```

颜色转换前的绘图示例：

![image1](/files/inline-images/image001_16.png)使用源代码示例中的颜色反转函数进行颜色转换后的相同绘图示例：

![image2](/files/inline-images/image002_9.png)

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
