每个LEADTOOLS图像处理命令(RotateCommand,AutoBinarizeCommand和DeskewCommand,仅列举几个)都继承自相同的基本RasterCommand类。 通过声明继承自此类的新类,可以执行自定义图像处理,可以根据需要使用现有RasterCommand和自定义逻辑的组合。
基类的成员列表在我们的文档中。 这些成员可以根据需求进行覆盖。
https://www.leadtools.com/help/l ... -rastercommand.html
以下是如何创建自定义RasterCommand的快速示例,它同时会翻转和镜像一张图片。 注意这是为了示例目的,如果需要基于开发需求,可以使其更加复杂。
- class FlipAndMirrorCommand : RasterCommand
- {
- private bool isCancelled = false;
- public override void OnProgress(RasterCommandProgressEventArgs e)
- {
- base.OnProgress(e);
- isCancelled = e.Cancel;
- }
- public override RasterImageChangedFlags Run(RasterImage image)
- {
- FlipCommand flip = new FlipCommand();
- RasterImageChangedFlags flags = flip.Run(image);
- OnProgress(new RasterCommandProgressEventArgs(50));
- if (isCancelled)
- {
- return flags;
- }
- flip.Horizontal = true;
- flags |= flip.Run(image);
- return flags;
- }
- }
复制代码
值得注意的是,显式调用的OnProgress()调用用于将进度报告给事件处理程序,以及在目标RasterImage上主动执行逻辑的Run()方法。
注意OnProgress如何调用基本实现 - 这实际上执行与命令关联的事件处理程序(如果适用),然后检查是否应该根据事件处理程序的结果取消事件。
Run()方法包含用于主动操作图像的逻辑。在这种情况下,命令首先垂直翻转图像,然后水平翻转图像,并在翻转之间发生进度事件(可能取消)。请注意,如果操作被取消,图像仍将垂直翻转。
注意Run()的返回类型是RasterImageChangedFlags。所有RasterCommands都是这样,但通常会丢弃该值。在这种情况下,正在处理实际的图像数据时,将返回RasterImageChangedFlags.Data。该标志指示由于RasterCommand而对图像所做的更改。有关可用标志的更多信息,请参见我们的文档。
https://www.leadtools.com/help/l ... gechangedflags.html
以下是有关如何实例化和运行此命令的简单代码:
- using (RasterCodecs codecs = new RasterCodecs())
- {
- RasterImage img = codecs.Load(@"cannon.png");
- RasterCommand cmd = new FlipAndMirrorCommand();
- cmd.Run(img);
- codecs.Save(img, @"cannon-fm.png", img.OriginalFormat, img.BitsPerPixel);
- }
复制代码
|
|