常见问题:如何在显示期间从我的应用程序修改绘制的颜色?

有时,渲染应用程序需要在渲染期间修改绘制的颜色,而无需长时间更新几何缓存。例如,此功能有助于使用校正的调色板、反转颜色、灰度或单色渲染模式、颜色伽马、亮度对比度校正来绘制图形。此功能适用于所有主要的 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

使用源代码示例中的颜色反转函数进行颜色转换后的相同绘图示例:

image2

 

今天就开始行动

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

免费试用