如何创建自定义图片处理命令(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]