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还提供了用于无损翻转、旋转、反转的转换方法。然而,只支持特定的文件格式。这个方法比加载一个图像,使用RotateCommand或FlipCommand转换它然后保存的效果好。在文件中处理文件、编写任何更新的标记时,使用了CodecsTransformMarkerCallback回调。
本文概览:
1 LeadTools“图像几何变换”的高级缩放类介绍
2 LeadTools“图像几何变换”的高级裁剪类介绍
3 LeadTools“图像几何变换”的其他高级变换类介绍
4 LeadTools“图像几何变换”的低级缩放方法介绍
下面简单为大家介绍相关类和方法,并附有相关代码片段:
1. 高级缩放类
调整已有图像的大小,并将调整后的图像设为目标图像,原始图像不变。 | |
---|---|
将图像调整到一个新的宽和高。 |
以下为使用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类,可以使用此类获取裁剪时使用的矩形。 | |
使用定义好的矩形裁剪图像。 |
以下为使用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. 其他的高级变换类
类名 | 说明 |
---|---|
以轴心点为中心,沿着弯曲的平面扭曲当前图像。这个中心点必须定义在图像内或区域内。若图像有一个区域,变换只应用于此区域。 这个类在Raster Pro及以上工具包中可用。 | |
旋转和翻转图像数据,以获取想要的查看视角。 | |
绕着一个圆柱扭曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
旋转特定的图像并拉直。 | |
从顶端到底端或从左到右翻转RasterImage | |
使用振幅数组通过所画的波形剪切图像。此命令仅在Raster Pro及以上工具包中可用。 | |
通过振幅数组和旋转角度中指定的波形,扭曲图像。此命令仅在Raster Pro及以上工具包中可用。 | |
将图像包裹在一个以曲线塑造的3D平面上。此命令只在Raster Pro及以上工具包中可用。 原图: 应用此效果后: | |
将图像按着曲线塑造的3D平面的半径包裹。此命令只在Raster Pro及以上工具包中可用。 原始图像: 应用此效果后: | |
使图片看起来像出自一个印象派画家之手。此命令只在Raster Pro及以上工具包中可用。 | |
将图像沿着Z轴放置在平行平面,并朝着中心点弯曲。此命令只在Raster Pro及以上工具包中可用。 原始图像: 使用后的效果: | |
将图像沿着Z轴放置在平行平面。此命令只在Raster Pro及以上工具包中可用。 原始图像: 使用后的效果: | |
将图像从矩形转换为极坐标,反之亦然。此命令只在Raster Pro及以上工具包中可用。 | |
通过将图像向中心挤压或从中心向外扩展来弯曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
通过绕着中心点旋转像素模糊图像。此命令只在Raster Pro及以上工具包中可用。 | |
使用从中心辐射的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
在同心圆内扭曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
以指定的度数旋转图像。此命令只在Raster Pro及以上工具包中可用。 | |
通过改变ViewPerspective旋转RasterImage。 | |
以平行四边形的方式移动图像的角。 | |
绕着一个3D球形,扭曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
根据旋转角度旋转图像,以产生漩涡的模式。此命令只在Raster Pro及以上工具包中可用。 | |
可完成特定格式的无损转换。 | |
沿着Z轴在隧道中放置图像。此命令只在Raster Pro及以上工具包中可用。 原始图像: 使用后的效果: | |
使用特定角度特定波形的两个垂直波扭曲图像。此命令只在Raster Pro及以上工具包中可用。 | |
创建细线,以特定的角度引导它,作用于被影响的图像上。此命令只在Raster Pro及以上工具包中可用。 | |
从特定中心点开始沿着半径线模糊图像。此命令只在Raster Pro及以上工具包中可用。 | |
使用从特定中心放大的波形扭曲图像。此命令只在Raster Pro及以上工具包中可用。 |
4. 低级缩放方法
ResizeBuffer 方法 | 使用Start方法将缓冲区调整为指定的新大小。 |
---|---|
Start 方法 | |
Stop 方法 | 清除Start方法中所有的数据变量和缓冲区。 |
DEMO下载:
DEMO提供了LeadTools调整图像大小、裁剪图像的全部代码。为了运行这些代码,你需要下载LeadTools全功能试用版自己试试。
若您在使用LeadTools的过程中遇到任何问题,欢迎在葡萄城开发者社区LeadTools板块提问,我们的专业技术团队期待您的到来!
关于葡萄城
葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。