Image handler
链接:http://www.codeproject.com/KB/aspnet/ImageHandler.aspx
1
<%@ WebHandler Language="C#" Class="ImageHandler" %>
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using System;
4
using System.Drawing;
5
using System.Drawing.Imaging;
6
using System.IO;
7
using System.Web;
8
using System.Web.Caching;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
public class ImageHandler : IHttpHandler
11
{
12
public int _width;
13
public int _height;
14
public static string noImageUrl = @"images\no_photo.jpg";
15
public string imageURL;
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
18
public void ProcessRequest(HttpContext context)
19
{
20
Bitmap bitOutput;
21![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
if (context.Cache[("ImageQueryURL-" + context.Request.QueryString.ToString())] !=
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
null)
25
{
26
bitOutput = (Bitmap)context.Cache[("ImageQueryURL-" +
27![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
context.Request.QueryString.ToString())];
29
}
30
else
31
{
32
Bitmap bitInput = GetImage(context);
33![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
bitInput = RotateFlipImage(context, bitInput);
35![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
if (SetHeightWidth(context, bitInput))
37
{ bitOutput = ResizeImage(bitInput, _width, _height); }
38
else { bitOutput = bitInput; }
39![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
context.Response.ContentType = "image/jpeg";
41
bitOutput.Save(context.Response.OutputStream,
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
System.Drawing.Imaging.ImageFormat.Jpeg);
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
context.Cache.Insert(("ImageQueryURL-" + context.Request.QueryString.ToString
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
()), bitOutput, new CacheDependency(imageURL), Cache.NoAbsoluteExpiration,
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
TimeSpan.FromHours(8), System.Web.Caching.CacheItemPriority.BelowNormal, null);
50
}
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
context.Response.ContentType = "image/jpeg";
53
bitOutput.Save(context.Response.OutputStream,
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
System.Drawing.Imaging.ImageFormat.Jpeg);
56
return;
57
}
58
59![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
/// <summary>
61
/// Get the image requested via the query string.
62
/// </summary>
63
/// <param name="context"></param>
64
/// <returns>Return the requested image or the "no image" default if it does not
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
exist.</returns>
67
public Bitmap GetImage(HttpContext context)
68
{
69
if (context.Cache[("ImagePath-" + context.Request.QueryString["image"])] == null)
70
{
71
string appPath = context.Server.MapPath(context.Request.ApplicationPath) +
72![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
Path.DirectorySeparatorChar;
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
if (String.IsNullOrEmpty(context.Request.QueryString["image"]))
76
{
77
appPath += noImageUrl;
78
}
79
else
80
{
81
if (System.IO.File.Exists((appPath + context.Request.QueryString
82![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
["image"])))
84
{
85
appPath += context.Request.QueryString["image"];
86
}
87
else
88
{
89
appPath += noImageUrl;
90
}
91
}
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
Bitmap bitOutput;
94
imageURL = appPath;
95![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
97
bitOutput = new Bitmap(appPath);
98
context.Cache.Insert(("ImagePath-" + context.Request.QueryString["image"]),
99![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
100
bitOutput, new CacheDependency(imageURL), Cache.NoAbsoluteExpiration, TimeSpan.FromHours
101![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
(8), System.Web.Caching.CacheItemPriority.BelowNormal, null);
103
return bitOutput;
104
}
105
else
106
{
107
return (Bitmap)context.Cache[("ImagePath-" + context.Request.QueryString
108![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
["image"])];
110
}
111
}
112
113![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
/// <summary>
115
/// Set the height and width of the handler class.
116
/// </summary>
117
/// <param name="context">The context to get the query string parameters, typically
118![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
current context.</param>
120
/// <param name="bitInput">The bitmap that determines the </param>
121
/// <returns>True if image needs to be resized, false if original dimensions can be
122![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
kept.</returns>
124
public bool SetHeightWidth(HttpContext context, Bitmap bitInput)
125
{
126
double inputRatio = Convert.ToDouble(bitInput.Width) / Convert.ToDouble
127![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
(bitInput.Height);
129
130
if (!(String.IsNullOrEmpty(context.Request["width"])) && !(String.IsNullOrEmpty
131![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
(context.Request["height"])))
133
{
134
_width = Int32.Parse(context.Request["width"]);
135
_height = Int32.Parse(context.Request["height"]);
136
return true;
137
}
138
else if (!(String.IsNullOrEmpty(context.Request["width"])))
139
{
140
_width = Int32.Parse(context.Request["width"]);
141
_height = Convert.ToInt32( (_width / inputRatio));
142
return true;
143
}
144
else if (!(String.IsNullOrEmpty(context.Request["height"])))
145
{
146
_height = Int32.Parse(context.Request["height"]);
147
_width = Convert.ToInt32((_height * inputRatio));
148
return true;
149
}
150
else
151
{
152
_height = bitInput.Height;
153
_width = bitInput.Width;
154
return false;
155
}
156
}
157![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
158
/// <summary>
159
/// Flip or rotate the bitmap according to the query string parameters.
160
/// </summary>
161
/// <param name="context">The context of the query string parameters.</param>
162
/// <param name="bitInput">The bitmap to be flipped or rotated.</param>
163
/// <returns>The bitmap after it has been flipped or rotated.</returns>
164
public Bitmap RotateFlipImage(HttpContext context, Bitmap bitInput)
165
{
166
Bitmap bitOut = bitInput;
167
168
if (String.IsNullOrEmpty(context.Request["RotateFlip"]))
169
{
170
return bitInput;
171
}
172
else if (context.Request["RotateFlip"] == "Rotate180flipnone")
173
{
174
bitOut.RotateFlip(RotateFlipType.Rotate180FlipNone);
175
}
176
else if (context.Request["RotateFlip"] == "Rotate180flipx")
177
{
178
bitOut.RotateFlip(RotateFlipType.Rotate180FlipX);
179
}
180
else if (context.Request["RotateFlip"] == "Rotate180flipxy")
181
{
182
bitOut.RotateFlip(RotateFlipType.Rotate180FlipXY);
183
}
184
else if (context.Request["RotateFlip"] == "Rotate180flipy")
185
{
186
bitOut.RotateFlip(RotateFlipType.Rotate180FlipY);
187
}
188
else if (context.Request["RotateFlip"] == "Rotate270flipnone")
189
{
190
bitOut.RotateFlip(RotateFlipType.Rotate270FlipNone);
191
}
192
else if (context.Request["RotateFlip"] == "Rotate270flipx")
193
{
194
bitOut.RotateFlip(RotateFlipType.Rotate270FlipX);
195
}
196
else if (context.Request["RotateFlip"] == "Rotate270FlipXY")
197
{
198
bitOut.RotateFlip(RotateFlipType.Rotate270FlipXY);
199
}
200
else if (context.Request["RotateFlip"] == "Rotate270FlipY")
201
{
202
bitOut.RotateFlip(RotateFlipType.Rotate270FlipY);
203
}
204
else if (context.Request["RotateFlip"] == "Rotate90FlipNone")
205
{
206
bitOut.RotateFlip(RotateFlipType.Rotate90FlipNone);
207
}
208
else if (context.Request["RotateFlip"] == "Rotate90FlipX")
209
{
210
bitOut.RotateFlip(RotateFlipType.Rotate90FlipX);
211
}
212
else if (context.Request["RotateFlip"] == "Rotate90FlipXY")
213
{
214
bitOut.RotateFlip(RotateFlipType.Rotate90FlipXY);
215
}
216
else if (context.Request["RotateFlip"] == "Rotate90FlipY")
217
{
218
bitOut.RotateFlip(RotateFlipType.Rotate90FlipY);
219
}
220
else if (context.Request["RotateFlip"] == "RotateNoneFlipX")
221
{
222
bitOut.RotateFlip(RotateFlipType.RotateNoneFlipX);
223
}
224
else if (context.Request["RotateFlip"] == "RotateNoneFlipXY")
225
{
226
bitOut.RotateFlip(RotateFlipType.RotateNoneFlipXY);
227
}
228
else if (context.Request["RotateFlip"] == "RotateNoneFlipY")
229
{
230
bitOut.RotateFlip(RotateFlipType.RotateNoneFlipY);
231
}
232
else { return bitInput; }
233![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
234
return bitOut;
235
}
236![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
237![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
238
/// <summary>
239
/// Resizes bitmap using high quality algorithms.
240
/// </summary>
241
/// <param name="originalBitmap"></param>
242
/// <param name="newWidth">The width of the returned bitmap.</param>
243
/// <param name="newHeight">The height of the returned bitmap.</param>
244
/// <returns>Resized bitmap.</returns>
245
public static Bitmap ResizeImage(Bitmap originalBitmap, int newWidth, int newHeight)
246
{
247
Bitmap inputBitmap = originalBitmap;
248
Bitmap resizedBitmap = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
249![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
250
Graphics g = Graphics.FromImage(resizedBitmap);
251
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
252
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
253
g.InterpolationMode =
254![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
255
System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
256
Rectangle rectangle = new Rectangle(0, 0, newWidth, newHeight);
257
g.DrawImage(inputBitmap, rectangle, 0, 0, inputBitmap.Width, inputBitmap.Height,
258![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
259
GraphicsUnit.Pixel);
260
g.Dispose();
261![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
262
return resizedBitmap;
263
}
264![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
265![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
266
public bool IsReusable
267
{
268
get
269
{
270
return true;
271
}
272
}
273
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
164
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
166
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
168
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
170
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
172
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
174
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
176
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
178
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
180
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
182
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
184
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
185
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
186
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
188
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
190
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
192
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
194
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
195
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
196
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
198
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
199
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
200
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
201
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
202
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
204
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
205
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
206
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
207
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
208
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
209
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
210
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
211
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
212
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
213
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
214
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
215
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
216
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
217
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
218
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
219
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
220
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
221
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
222
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
223
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
224
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
225
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
226
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
227
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
228
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
229
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
230
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
231
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
232
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
233
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
234
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
235
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
236
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
237
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
238
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
239
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
240
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
241
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
242
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
243
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
244
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
245
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
246
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
247
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
248
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
249
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
250
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
251
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
252
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
253
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
254
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
255
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
256
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
257
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
258
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
259
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
260
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
261
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
262
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
263
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
264
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
265
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
266
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
267
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
268
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
269
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
270
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
271
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
272
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
273
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)