当前位置: 编程技术>.net/c#/asp.net
C#实现图片分割方法与代码
来源: 互联网 发布时间:2014-10-12
本文导语: 1. 概述 有时候我们需要在web页面上显示一张图,比如说一张地图,而这张地图会比较大。这时候如果我们把一张大图分隔成一组小图,那么客户端的显示速度会明显地感觉块。希望阅读本文对你有所帮助。 2. 实现思路 .NET F...
1. 概述
有时候我们需要在web页面上显示一张图,比如说一张地图,而这张地图会比较大。这时候如果我们把一张大图分隔成一组小图,那么客户端的显示速度会明显地感觉块。希望阅读本文对你有所帮助。
2. 实现思路
.NET Framework GDI+ 为我们提供了一组丰富地类来编辑图形图像。有关.NET Framework GDI+的详细资料请查阅msdn相关文档。这里只简要叙述本程序要用的的几个类。
System.Drawing.Image.LoadFile 方法可以从指定的文件创建 Image 对象。System.Drawing.Image.Save方法可以将此 Image 对象保存到指定文件。 System.Drawing.Image.Width和System.Drawing.Image.Height属性可以得到图片的宽度和高度。
System.Drawing.Graphics类可以编辑图像。System.Drawing.Graphics.DrawImage方法在指定位置并且按指定大小绘制指定的 Image 对象的指定部分。
图片分隔说明:就是把一张大图,按指定的宽度和高度分隔成一组小块
对初学者的提示:在我们读书时学过的数学坐标如图2所示,在GDI+里的坐标如图3所示
3. 实现代码
1public class CropImageManipulator
2 {
3 public CropImageManipulator()
4 {
5
6 }
7
8 // 不含扩展名的文件名
9 private string _fileNameWithoutExtension;
10 // 文件扩展名
11 private string _fileExtension;
12 // 文件所属的文件夹
13 private string _fileDirectory;
14 public string Cropping(string inputImgPath, int cropWidth, int cropHeight)
15 {
16 this._fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(inputImgPath);
17 this._fileExtension = System.IO.Path.GetExtension(inputImgPath);
18 this._fileDirectory = System.IO.Path.GetDirectoryName(inputImgPath);
19
20 // 装载要分隔的图片
21 Image inputImg = Image.FromFile(inputImgPath);
22 int imgWidth = inputImg.Width;
23 int imgHeight = inputImg.Height;
24
25 // 计算要分几格
26 int widthCount = (int)Math.Ceiling((imgWidth * 1.00) / (cropWidth * 1.00));
27 int heightCount = (int)Math.Ceiling((imgHeight * 1.00) / (cropHeight * 1.00));
28 //----------------------------------------------------------------------
29 ArrayList areaList = new ArrayList();
30
31 System.Text.StringBuilder sb = new System.Text.StringBuilder();
32 sb.Append("");
33 sb.Append(System.Environment.NewLine);
34
35 int i = 0;
36 for (int iHeight = 0; iHeight imgWidth) ? (imgWidth - pointX) : cropWidth;
51 int areaHeight = ((pointY + cropHeight) > imgHeight) ? (imgHeight - pointY) : cropHeight;
52 string s = string.Format("{0};{1};{2};{3}",pointX,pointY,areaWidth,areaHeight);
53
54 Rectangle rect = new Rectangle(pointX,pointY,areaWidth,areaHeight);
55 areaList.Add(rect);
56 i ++;
57 }
58 sb.Append("");
59 sb.Append(System.Environment.NewLine);
60 }
61
62 sb.Append("");
63
64
65 //----------------------------------------------------------------------
66
67 for (int iLoop = 0 ; iLoop
有时候我们需要在web页面上显示一张图,比如说一张地图,而这张地图会比较大。这时候如果我们把一张大图分隔成一组小图,那么客户端的显示速度会明显地感觉块。希望阅读本文对你有所帮助。
2. 实现思路
.NET Framework GDI+ 为我们提供了一组丰富地类来编辑图形图像。有关.NET Framework GDI+的详细资料请查阅msdn相关文档。这里只简要叙述本程序要用的的几个类。
System.Drawing.Image.LoadFile 方法可以从指定的文件创建 Image 对象。System.Drawing.Image.Save方法可以将此 Image 对象保存到指定文件。 System.Drawing.Image.Width和System.Drawing.Image.Height属性可以得到图片的宽度和高度。
System.Drawing.Graphics类可以编辑图像。System.Drawing.Graphics.DrawImage方法在指定位置并且按指定大小绘制指定的 Image 对象的指定部分。
图片分隔说明:就是把一张大图,按指定的宽度和高度分隔成一组小块
对初学者的提示:在我们读书时学过的数学坐标如图2所示,在GDI+里的坐标如图3所示
3. 实现代码
1public class CropImageManipulator
2 {
3 public CropImageManipulator()
4 {
5
6 }
7
8 // 不含扩展名的文件名
9 private string _fileNameWithoutExtension;
10 // 文件扩展名
11 private string _fileExtension;
12 // 文件所属的文件夹
13 private string _fileDirectory;
14 public string Cropping(string inputImgPath, int cropWidth, int cropHeight)
15 {
16 this._fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(inputImgPath);
17 this._fileExtension = System.IO.Path.GetExtension(inputImgPath);
18 this._fileDirectory = System.IO.Path.GetDirectoryName(inputImgPath);
19
20 // 装载要分隔的图片
21 Image inputImg = Image.FromFile(inputImgPath);
22 int imgWidth = inputImg.Width;
23 int imgHeight = inputImg.Height;
24
25 // 计算要分几格
26 int widthCount = (int)Math.Ceiling((imgWidth * 1.00) / (cropWidth * 1.00));
27 int heightCount = (int)Math.Ceiling((imgHeight * 1.00) / (cropHeight * 1.00));
28 //----------------------------------------------------------------------
29 ArrayList areaList = new ArrayList();
30
31 System.Text.StringBuilder sb = new System.Text.StringBuilder();
32 sb.Append("");
33 sb.Append(System.Environment.NewLine);
34
35 int i = 0;
36 for (int iHeight = 0; iHeight imgWidth) ? (imgWidth - pointX) : cropWidth;
51 int areaHeight = ((pointY + cropHeight) > imgHeight) ? (imgHeight - pointY) : cropHeight;
52 string s = string.Format("{0};{1};{2};{3}",pointX,pointY,areaWidth,areaHeight);
53
54 Rectangle rect = new Rectangle(pointX,pointY,areaWidth,areaHeight);
55 areaList.Add(rect);
56 i ++;
57 }
58 sb.Append("");
59 sb.Append(System.Environment.NewLine);
60 }
61
62 sb.Append("");
63
64
65 //----------------------------------------------------------------------
66
67 for (int iLoop = 0 ; iLoop