实现自定义绘制

本主题描述如何在LEADTOOLS中使用自定义回调实现绘制到非标准灰度显示适配器。

概述:

有几个实现自定义绘画的类。这些类使您能够覆盖一些系统绘图函数,以访问高级图形显示中的额外特性。特别值得注意的是可以显示超过8位灰度颜色的显示适配器。

要利用这些特性,可以实现aLeadtools.Drawing.RasterPaintCallbacks类,并将其添加到Leadtools.Drawing.RasterPaintProperties.PaintCallbacks.一个希望支持多个显卡的应用程序将为每个适配器创建一个类,并将它们全部添加到RasterImagePainter。PaintCallbacks列表。

这个列表是必需的,因为运行应用程序的计算机可能有多个显示器和多个显示适配器。用户可以将窗口从一个监视器拖到另一个监视器,因此您应该使用与系统中显示适配器兼容的所有自定义绘制对象填充PaintCallbacks列表。或者您可以添加所有您可以支持的显示适配器,因为在列表中有不必要的回调的开销很低。

每当一个Leadtools。光栅Image对象需要绘制时,它将尝试所有自定义回调对象,直到找到与当前显示适配器兼容的对象。如果它没有找到任何兼容的对象,它将使用默认的GDI函数进行绘制。

对于每个RasterPaintCallbacks对象,RasterImage将执行以下操作:

  1. 调用它的RasterImagePaintCallbackFunction。IsCompatibleDCCallback委托功能。如果函数返回true,它将选择该对象来实现绘画,然后转到步骤2。如果函数返回false, RasterImage对象将尝试列表中的下一个RasterPaintCallbacks。如果没有找到兼容的对象,绘图将默认为正常行为。
  2. 调用RasterImagePaintCallbackFunction。PrePaintCallback油漆开始前一次。应用程序可以执行内存分配和初始化。这是物体被选中进行绘画的信号。
  3. 必要时调用所有其他委托。
  4. 调用RasterImagePaintCallbackFunction。PostPaintCallback委托后油漆完成。

如果应用程序在没有IsCompatibleDCCallback委托的情况下将RasterPaintCallbacks对象添加到列表中,则该对象将始终用于执行绘制。RasterImagePainter中的剩余项。PaintCallbacks列表将不会被查询。

所有的油漆回调都是看起来相同的委托(c++语法):

Object^ MyCallback(RasterImage^ image, array^Params)

每个回调的参数都是不同的,并且通过Params参数传递。看到Leadtools.Drawing.RasterPaintProperties.PaintCallbacks获取关于为每个回调类型传递哪些参数的信息。

参数仅用于读取。需要回传信息的回调将通过其返回值来执行。当需要返回多个值时,将使用类来实现此目的(请参阅RasterImagePaintCallbackFunction。GetDibInfoCallback回调这样的例子)。

您不需要实现每个回调。你可以实现1、2、3或任意数量的回调。如果没有提供回调,将使用默认的内部回调。

至少,你应该考虑以下回调:

回调 用途/描述
IsCompatibleDCCallback 测试HDC与显示适配器是否兼容
GetDibInfoCallback 告诉LEADTOOLS设备期望的数据类型
StretchDIBitsCallback 实现实际的绘画
ConvertLineCallback 如果内部的颜色转换功能不够,要进行颜色转换。建议您先尝试内部转换函数
PrePaintCallback 为当前绘制执行任何内存分配或初始化
PostPaintCallback 释放在PrePaintCallback中分配的内存

回调被添加到RasterPaintCallbacks对象使用Leadtools.Drawing.RasterPaintCallbacks.SetCallback (Leadtools.Drawing.RasterImagePaintCallbackFunction Leadtools.Drawing.PaintCallbackDelegate).所以伪代码可能是这样的:

分配并初始化回调类*/myCallbacks = gcnew RasterPaintCallbacks();myCallbacks - > SetCallback (IsCompatibleDCCallback myFunc1);myCallbacks - > SetCallback (GetDibInfoCallback myFunc2);/*添加回调到RasterImage对象*/myRasterImage - > RasterPaint - >添加(myCallbacks);

LEADTOOLS成像、医疗和文档
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。