Richard.Ma 发表于 2017-5-22 18:19:24

如何创建自定义图片处理命令(RasterCommand)

每个LEADTOOLS图像处理命令(RotateCommand,AutoBinarizeCommand和DeskewCommand,仅列举几个)都继承自相同的基本RasterCommand类。 通过声明继承自此类的新类,可以执行自定义图像处理,可以根据需要使用现有RasterCommand和自定义逻辑的组合。

基类的成员列表在我们的文档中。 这些成员可以根据需求进行覆盖。
https://www.leadtools.com/help/leadtools/v19m/dh/l/imageprocessing-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/leadtools/v19m/dh/l/rasterimagechangedflags.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);
         }

页: [1]
查看完整版本: 如何创建自定义图片处理命令(RasterCommand)