欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现图片分割方法与代码

程序员文章站 2023-10-30 15:36:10
1. 概述 有时候我们需要在web页面上显示一张图,比如说一张地图,而这张地图会比较大。这时候如果我们把一张大图分隔成一组小图,那么客户端的显示速度会明显地感觉块...
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("<table cellpadding='0' cellspacing='0' border='[$border]'>");
33            sb.append(system.environment.newline);
34
35            int i = 0;
36            for (int iheight = 0; iheight < heightcount ; iheight ++)
37            {
38                sb.append("<tr>");
39                sb.append(system.environment.newline);
40                for (int iwidth = 0; iwidth < widthcount ; iwidth ++)
41                {
42                    //string filename = "<img src='http://localhost/srcommbeijingfile/"  + this._filenamewithoutextension + " _" + i.tostring() + this._fileextension + "'>";
43                    string filename = string.format("<img src='http://localhost/srcommbeijingfile/{0}_{1}{2}'  />",this._filenamewithoutextension,i,this._fileextension);
44                    sb.append("<td>" + filename + "</td>");
45                    sb.append(system.environment.newline);
46
47
48                    int pointx = iwidth * cropwidth;
49                    int pointy = iheight * cropheight;
50                    int areawidth = ((pointx + cropwidth) > 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("</tr>");
59                sb.append(system.environment.newline);
60            }
61
62            sb.append("</table>");
63
64            
65            //----------------------------------------------------------------------    
66            
67            for (int iloop = 0 ; iloop < arealist.count ; iloop ++)
68            {
69                rectangle rect = (rectangle)arealist[iloop];
70                string filename = this._filedirectory + "\\" + this._filenamewithoutextension + "_" + iloop.tostring() + this._fileextension;
71                bitmap newbmp = new bitmap(rect.width,rect.height,pixelformat.format24bpprgb);
72                graphics newbmpgraphics = graphics.fromimage(newbmp);
73                newbmpgraphics.drawimage(inputimg,new rectangle(0,0,rect.width,rect.height),rect,graphicsunit.pixel);
74                newbmpgraphics.save();
75                switch (this._fileextension.tolower())
76                {
77                    case ".jpg":
78                    case ".jpeg":
79                        newbmp.save(filename,imageformat.jpeg);
80                        break;
81                    case "gif":
82                        newbmp.save(filename,imageformat.gif);
83                        break;
84                }
85                
86            }
87            inputimg.dispose();
88            string html = sb.tostring();
89            return html;
90        }
91
92    }