找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-22 18:19  /   查看:2608  /  回复:0
每个LEADTOOLS图像处理命令(RotateCommand,AutoBinarizeCommand和DeskewCommand,仅列举几个)都继承自相同的基本RasterCommand类。 通过声明继承自此类的新类,可以执行自定义图像处理,可以根据需要使用现有RasterCommand和自定义逻辑的组合。

基类的成员列表在我们的文档中。 这些成员可以根据需求进行覆盖。
https://www.leadtools.com/help/l ... -rastercommand.html

以下是如何创建自定义RasterCommand的快速示例,它同时会翻转和镜像一张图片。 注意这是为了示例目的,如果需要基于开发需求,可以使其更加复杂。

  1.       class FlipAndMirrorCommand : RasterCommand
  2.       {
  3.          private bool isCancelled = false;
  4.          public override void OnProgress(RasterCommandProgressEventArgs e)
  5.          {
  6.             base.OnProgress(e);
  7.             isCancelled = e.Cancel;
  8.          }
  9.          public override RasterImageChangedFlags Run(RasterImage image)
  10.          {
  11.             FlipCommand flip = new FlipCommand();
  12.             RasterImageChangedFlags flags = flip.Run(image);

  13.             OnProgress(new RasterCommandProgressEventArgs(50));
  14.             if (isCancelled)
  15.             {
  16.                return flags;
  17.             }

  18.             flip.Horizontal = true;
  19.             flags |= flip.Run(image);

  20.             return flags;
  21.          }
  22.       }
复制代码

值得注意的是,显式调用的OnProgress()调用用于将进度报告给事件处理程序,以及在目标RasterImage上主动执行逻辑的Run()方法。

注意OnProgress如何调用基本实现 - 这实际上执行与命令关联的事件处理程序(如果适用),然后检查是否应该根据事件处理程序的结果取消事件。

Run()方法包含用于主动操作图像的逻辑。在这种情况下,命令首先垂直翻转图像,然后水平翻转图像,并在翻转之间发生进度事件(可能取消)。请注意,如果操作被取消,图像仍将垂直翻转。

注意Run()的返回类型是RasterImageChangedFlags。所有RasterCommands都是这样,但通常会丢弃该值。在这种情况下,正在处理实际的图像数据时,将返回RasterImageChangedFlags.Data。该标志指示由于RasterCommand而对图像所做的更改。有关可用标志的更多信息,请参见我们的文档。
https://www.leadtools.com/help/l ... gechangedflags.html

以下是有关如何实例化和运行此命令的简单代码:

  1.          using (RasterCodecs codecs = new RasterCodecs())
  2.          {
  3.             RasterImage img = codecs.Load(@"cannon.png");
  4.             RasterCommand cmd = new FlipAndMirrorCommand();
  5.             cmd.Run(img);

  6.             codecs.Save(img, @"cannon-fm.png", img.OriginalFormat, img.BitsPerPixel);
  7.          }
复制代码


1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 立即注册
返回顶部