LeadTools中文图像处理教程(2):图像的几何变换

几何变换包括缩放、裁剪、旋转、翻转或反转图像等。LeadTools为这些几何变换均提供了各种各样的方法,还为特定的文件格式提供了无损翻转、旋转、反转的转换方法。本文主要以四个部分介绍LeadTools几何变换方法的相关内容,分别为:1 高级缩放类 2 高级裁剪类3 其他的高级变换类 4 低级缩放方法

发布于 2014/09/13 00:00

行业动态


  • LeadTools中文图像处理教程(1):更改数据格式 点击进入

  • LeadTools中文图像处理教程(2):图像的几何变换 点击进入

  • LeadTools中文图像处理教程(3):倾斜校正 点击进入

  • LeadTools中文图像处理教程(4):调整图像亮度和对比度 点击进入

  • LeadTools中文图像处理教程(5):图像去噪 点击进入

  • LeadTools中文图像处理教程(6):检测和增强边缘、线条 点击进入

  • LeadTools中文图像处理教程(7):应用艺术效果 点击进入

  • LeadTools中文图像处理教程(8):调整色彩 点击进入

  • LeadTools中文图像处理教程(9):添加图像至另一个图像 点击进入

  • LeadTools中文图像处理教程(10):窗位(仅用于Medical) 点击进入

  • LeadTools中文图像处理教程(11):对比图像 点击进入

几何变换包括缩放、裁剪、旋转、翻转或反转图像。一些几何变换方法主要适用于文档图像。例如,DeskewCommand可以自动拉直扫描的文档。对于任何一种图像的缩放,SizeCommand类提供了最新的选项,但是您也可以选择可用的低级方法替代。

LEADTOOLS还提供了用于无损翻转、旋转、反转的转换方法。然而,只支持特定的文件格式。这个方法比加载一个图像,使用RotateCommandFlipCommand转换它然后保存的效果好。在文件中处理文件、编写任何更新的标记时,使用了CodecsTransformMarkerCallback回调。

 

本文概览:

1 LeadTools“图像几何变换”的高级缩放类介绍

2 LeadTools“图像几何变换”的高级裁剪类介绍

3 LeadTools“图像几何变换”的其他高级变换类介绍

4 LeadTools“图像几何变换”的低级缩放方法介绍

 

下面简单为大家介绍相关类和方法,并附有相关代码片段:

1. 高级缩放类


ResizeCommand

调整已有图像的大小,并将调整后的图像设为目标图像,原始图像不变。

SizeCommand

将图像调整到一个新的宽和高。

以下为使用ResizeCommand 类的代码片段(注:Resize.rar):

  1: RasterCodecs codecs = new RasterCodecs();
  2: string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3: string destFileName = Path.Combine(ImagesPath.Path, "ResizeCommand.bmp");
  4: 
  5: // 从磁盘加载原始图像
  6: RasterImage srcImage = codecs.Load(srcFileName);
  7: 
  8: // 创建目标图像
  9: RasterImage destImage = new RasterImage(
 10:    RasterMemoryFlags.Conventional,
 11:    100,
 12:    100,
 13:    srcImage.BitsPerPixel,
 14:    srcImage.Order,
 15:    srcImage.ViewPerspective,
 16:    srcImage.GetPalette(),
 17:    IntPtr.Zero,
 18:    0);
 19: 
 20: // 将原始图像调整大小
 21: ResizeCommand command = new ResizeCommand();
 22: command.DestinationImage = destImage;
 23: command.Flags = RasterSizeFlags.Bicubic;
 24: command.Run(srcImage);
 25: 
 26: // 将调整后的图像保存至磁盘
 27: codecs.Save(destImage, destFileName, RasterImageFormat.Bmp, 24);
 28: 
 29: // 清理
 30: srcImage.Dispose();
 31: destImage.Dispose();
 32: codecs.Dispose();

以下为使用SizeCommand类的代码片段(注:Resize.rar):

  1:    RasterCodecs codecs = new RasterCodecs();
  2:    string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3:    string destFileName = Path.Combine(ImagesPath.Path,"SizeCommand.bmp");
  4: 
  5:    // 从磁盘加载原始图像
  6:    RasterImage image = codecs.Load(srcFileName);
  7:    SizeCommand command = new SizeCommand();
  8:    command.Width = 128;
  9:    command.Height = 128;
 10:    command.Flags = RasterSizeFlags.Resample;
 11:    command.Run(image);
 12: 
 13:    // 将图像保存至磁盘
 14:    codecs.Save(image, destFileName, RasterImageFormat.Bmp, 8);
 15: 
 16:    // 清理
 17:    image.Dispose();
 18:    codecs.Dispose();
 

2. 高级裁剪类


AutoCropCommand

裁剪当前图像,删除边缘的空白区域

AutoCropRectangleCommand

若使用了AutoCropCommand类,可以使用此类获取裁剪时使用的矩形。

CropCommand

使用定义好的矩形裁剪图像。

以下为使用AutoCropCommand类的代码片段(注:CropCommand.rar):

  1: // 加载图像
  2: RasterCodecs codecs = new RasterCodecs();
  3: codecs.ThrowExceptionsOnInvalidImages = true;
  4: RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"));
  5: 
  6: // 准备command
  7: AutoCropCommand command = new AutoCropCommand();
  8: 
  9: //在误差20内自动裁剪图像
 10: command.Threshold = 20;
 11: 
 12: command.Run(image);

以下为使用AutoCropRectangleCommand类的代码片段(注:CropCommand.rar):

  1:    //加载图像
  2:    RasterCodecs codecs = new RasterCodecs();
  3:    codecs.ThrowExceptionsOnInvalidImages = true;
  4: 
  5:    RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"));
  6: 
  7:    // 准备command
  8:    AutoCropRectangleCommand command = new AutoCropRectangleCommand();
  9:    command.Threshold = 0;
 10:    command.Run(image);
 11:    MessageBox.Show("左 = " + command.Rectangle.Left.ToString() + "\n" +
 12:          "上 = " + command.Rectangle.Top.ToString() + "\n" +
 13:          "右 = " + command.Rectangle.Right.ToString() + "\n" +
 14:          "下 = " + command.Rectangle.Bottom.ToString());

以下为使用CropCommand类的代码片段(注:CropCommand.rar):

  1:    RasterCodecs codecs = new RasterCodecs();
  2:    string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
  3:    string destFileName = Path.Combine(ImagesPath.Path, "CropCommand.bmp");
  4: 
  5:    //从磁盘中加载原始图像
  6:    RasterImage image = codecs.Load(srcFileName);
  7: 
  8:    // 从图像的各边裁剪掉100像素
  9:    CropCommand command = new CropCommand();
 10:    command.Rectangle = new LeadRect(
 11:       100,
 12:       100,
 13:       image.Width - 100,
 14:       image.Height - 100);
 15:    command.Run(image);
 16: 
 17:    // 将其保存至磁盘
 18:    codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24);
 19: 
 20:    // 清理
 21:    image.Dispose();
 22:    codecs.Dispose();


3. 其他的高级变换类


类名

说明

BendCommand

以轴心点为中心,沿着弯曲的平面扭曲当前图像。这个中心点必须定义在图像内或区域内。若图像有一个区域,变换只应用于此区域。

这个类在Raster Pro及以上工具包中可用。

ChangeViewPerspectiveCommand

旋转和翻转图像数据,以获取想要的查看视角。

CylinderCommand

绕着一个圆柱扭曲图像。此命令只在Raster Pro及以上工具包中可用。

DeskewCommand

旋转特定的图像并拉直。

FlipCommand

从顶端到底端或从左到右翻转RasterImage

FreeHandShearCommand

使用振幅数组通过所画的波形剪切图像。此命令仅在Raster Pro及以上工具包中可用。

FreeHandWaveCommand

通过振幅数组和旋转角度中指定的波形,扭曲图像。此命令仅在Raster Pro及以上工具包中可用。

FreePlaneBendCommand

将图像包裹在一个以曲线塑造的3D平面上。此命令只在Raster Pro及以上工具包中可用。

原图:

clip_image002

应用此效果后:

clip_image004

FreeRadialBendCommand

将图像按着曲线塑造的3D平面的半径包裹。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image006

应用此效果后:

clip_image008

ImpressionistCommand

使图片看起来像出自一个印象派画家之手。此命令只在Raster Pro及以上工具包中可用。

PlaneBendCommand

将图像沿着Z轴放置在平行平面,并朝着中心点弯曲。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image010

使用后的效果:

clip_image012

PlaneCommand

将图像沿着Z轴放置在平行平面。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image013

使用后的效果:

clip_image015

PolarCommand

将图像从矩形转换为极坐标,反之亦然。此命令只在Raster Pro及以上工具包中可用。

PunchCommand

通过将图像向中心挤压或从中心向外扩展来弯曲图像。此命令只在Raster Pro及以上工具包中可用。

RadialBlurCommand

通过绕着中心点旋转像素模糊图像。此命令只在Raster Pro及以上工具包中可用。

RadialWaveCommand

使用从中心辐射的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。

RippleCommand

在同心圆内扭曲图像。此命令只在Raster Pro及以上工具包中可用。

RotateCommand

以指定的度数旋转图像。此命令只在Raster Pro及以上工具包中可用。

RotateViewPerspective 方法

通过改变ViewPerspective旋转RasterImage

ShearCommand

以平行四边形的方式移动图像的角。

SphereCommand

绕着一个3D球形,扭曲图像。此命令只在Raster Pro及以上工具包中可用。

SwirlCommand

根据旋转角度旋转图像,以产生漩涡的模式。此命令只在Raster Pro及以上工具包中可用。

RasterCodecs.Transform 方法

可完成特定格式的无损转换。

TunnelCommand

沿着Z轴在隧道中放置图像。此命令只在Raster Pro及以上工具包中可用。

原始图像:

clip_image017

使用后的效果:

clip_image019

WaveCommand

使用特定角度特定波形的两个垂直波扭曲图像。此命令只在Raster Pro及以上工具包中可用。

WindCommand

创建细线,以特定的角度引导它,作用于被影响的图像上。此命令只在Raster Pro及以上工具包中可用。

ZoomBlurCommand

从特定中心点开始沿着半径线模糊图像。此命令只在Raster Pro及以上工具包中可用。

ZoomWaveCommand

使用从特定中心放大的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。

4. 低级缩放方法


ResizeBuffer 方法

使用Start方法将缓冲区调整为指定的新大小。

Start 方法

ResizeBuffer(Byte[],Int32,Int32,Int32)方法建立信息。

Stop 方法

清除Start方法中所有的数据变量和缓冲区。

DEMO下载:

Resize.rar (348.00 kb) 

CropCommand.rar (317.39 kb)

 

DEMO提供了LeadTools调整图像大小、裁剪图像的全部代码。为了运行这些代码,你需要下载LeadTools全功能试用版自己试试。

 

LeadTools试用版下载


了解LeadTools产品更多特性


若您在使用LeadTools的过程中遇到任何问题,欢迎在葡萄城开发者社区LeadTools板块提问,我们的专业技术团队期待您的到来!


点击查看更多LeadTools使用教程、博文

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态