C# GDI+ 实现图片分隔
生活随笔
收集整理的這篇文章主要介紹了
C# GDI+ 实现图片分隔
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 概述
有時候我們需要在web頁面上顯示一張圖,比如說一張地圖,而這張地圖會比較大。這時候如果我們把一張大圖分隔成一組小圖,那么客戶端的顯示速度會明顯地感覺塊。希望閱讀本文對你有所幫助。
2. 實現(xiàn)思路
.NET Framework GDI+ 為我們提供了一組豐富地類來編輯圖形圖像。有關(guān).NET Framework GDI+的詳細(xì)資料請查閱msdn相關(guān)文檔。這里只簡要敘述本程序要用的的幾個類。
System.Drawing.Image.LoadFile方法可以從指定的文件創(chuàng)建 Image 對象。System.Drawing.Image.Save方法可以將此 Image 對象保存到指定文件。System.Drawing.Image.Width和System.Drawing.Image.Height屬性可以得到圖片的寬度和高度。
System.Drawing.Graphics類可以編輯圖像。System.Drawing.Graphics.DrawImage方法在指定位置并且按指定大小繪制指定的 Image 對象的指定部分。
圖片分隔說明:就是把一張大圖,按指定的寬度和高度分隔成一組小圖
| 圖1 |
對初學(xué)者的提示:在我們讀書時學(xué)過的數(shù)學(xué)坐標(biāo)如圖2所示,在GDI+里的坐標(biāo)如圖3所示
| 圖2 | 圖3 |
3. 實現(xiàn)代碼
?1public?class?CropImageManipulator
?2????{
?3????????public?CropImageManipulator()
?4????????{
?5????????????
?6????????}
?7
?8????????//?不含擴(kuò)展名的文件名
?9????????private?string?_fileNameWithoutExtension;
10????????//?文件擴(kuò)展名
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????}
總結(jié)
以上是生活随笔為你收集整理的C# GDI+ 实现图片分隔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA控制面板打不开
- 下一篇: C# .NET 如何修改代码字体