日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于Graphics也有了基本了解下面想說的的是學這個東東干什么呢,到底如何應用
目前常見應用
1、驗證碼(參照網上的)
2、打印排版(會提到關于條形碼大小設置)
3、自定義控件

一、驗證碼

  1     class ValidateCode
  2     {
  3         #region 定義和初始化配置字段
  4 
  5         //用戶存取驗證碼字符串
  6         public string validationCode = String.Empty;
  7 
  8         //生成的驗證碼字符串
  9         public char[] chars = null;
 10 
 11         /// <summary>
 12         /// 獲取隨機驗證碼
 13         /// </summary>
 14         public String ValidationCode
 15         {
 16             get { return validationCode; }
 17         }
 18 
 19         /// <summary>
 20         /// 驗證碼字符串的長度
 21         /// </summary>
 22         private Int32 validationCodeCount = 4;
 23 
 24         /// <summary>
 25         /// 獲取和設置驗證碼字符串的長度
 26         /// </summary>
 27         public Int32 ValidationCodeCount
 28         {
 29             get { return validationCodeCount; }
 30             set { validationCodeCount = value; }
 31         }
 32 
 33         /// <summary>
 34         /// 畫板對象
 35         /// </summary>
 36         Graphics dc = null;
 37 
 38         //驗證碼的寬度,默認為130
 39         private int bgWidth = 130;
 40 
 41         /// <summary>
 42         /// 驗證碼的寬度,默認為130
 43         /// </summary>
 44         public Int32 Width
 45         {
 46             get { return bgWidth; }
 47             set { bgWidth = value; }
 48         }
 49 
 50         //驗證碼的寬度,默認為130
 51         private int bgHeight = 40;
 52 
 53         /// <summary>
 54         /// 驗證碼的高度,默認為40
 55         /// </summary>
 56         public Int32 Height
 57         {
 58             get { return bgHeight; }
 59             set { bgHeight = value; }
 60         }
 61 
 62         //字體大小 字體最小值
 63         private int fontMinSize = 20;
 64 
 65         /// <summary>
 66         /// 驗證碼字體的最小值,默認為20,建議不小于15像素
 67         /// </summary>
 68         public Int32 FontMinSize
 69         {
 70             get { return fontMinSize; }
 71             set { fontMinSize = value; }
 72         }
 73         //字體大小 字體最大值
 74         private Int32 fontMaxSize = 25;
 75 
 76         /// <summary>
 77         /// 驗證碼字體的最大值,默認為25
 78         /// </summary>
 79         public Int32 FontMaxSize
 80         {
 81             get { return fontMaxSize; }
 82             set { fontMaxSize = value; }
 83         }
 84 
 85         //驗證碼字體的顏色
 86         private Color[] fontColor = { };
 87 
 88         /// <summary>
 89         /// 驗證碼字體的顏色,默認為系統自動生成字體顏色
 90         /// </summary>
 91         public Color[] FontColor
 92         {
 93             get { return fontColor; }
 94             set { fontColor = value; }
 95         }
 96 
 97         private Color backColor = Color.FromArgb(243, 255, 255);
 98 
 99         /// <summary>
100         /// 驗證碼的背景色,默認為Color.FromArgb(243, 251, 254)
101         /// </summary>
102         public Color BackgroundColor
103         {
104             get { return backColor; }
105             set { backColor = value; }
106         }
107 
108         //貝塞爾曲線的條數,默認為3條
109         private Int32 bezierCount = 3;
110 
111         /// <summary>
112         /// 貝塞爾曲線的條數,默認為3條
113         /// </summary>
114         public Int32 BezierCount
115         {
116             get { return bezierCount; }
117             set { bezierCount = value; }
118         }
119 
120         //直線條數,默認為3條
121         private Int32 lineCount = 3;
122 
123         /// <summary>
124         /// 直線條數,默認為3條
125         /// </summary>
126         public Int32 LineCount
127         {
128             get { return lineCount; }
129             set { lineCount = value; }
130         }
131 
132         //隨機字符串列表
133         private String charCollection = "2,3,4,5,6,7,8,9,a,s,d,f,g,h,z,c,v,b,n,m,k,q,w,e,r,t,y,u,p,A,S,D,F,G,H,Z,C,V,B,N,M,K,Q,W,E,R,T,Y,U,P"; //定義驗證碼字符及出現頻次 ,避免出現0 o j i l 1 x; 
134 
135         /// <summary>
136         /// 隨機字符串列表,請使用英文狀態下的逗號分隔
137         /// </summary>
138         public String CharCollection
139         {
140             get { return charCollection; }
141             set { charCollection = value; }
142         }
143 
144         //驗證碼字符串個數,默認為4個字符
145         private Int32 intCount = 4;
146 
147         /// <summary>
148         /// 驗證碼字符串個數,默認為4個字符
149         /// </summary>
150         public Int32 IntCount
151         {
152             get { return intCount; }
153             set { intCount = value; }
154         }
155 
156         //是否添加噪點,默認添加,噪點顏色為系統隨機生成。
157         private Boolean isPixel = true;
158         /// <summary>
159         /// 是否添加噪點,默認添加,噪點顏色為系統隨機生成。
160         /// </summary>
161         public Boolean IsPixel
162         {
163             get { return isPixel; }
164             set { isPixel = value; }
165         }
166 
167         //是否添加隨機噪點字符串,默認添加
168         private Boolean isRandString = true;
169         /// <summary>
170         /// 是否添加隨機噪點字符串,默認添加
171         /// </summary>
172         public Boolean IsRandString
173         {
174             get { return isRandString; }
175             set { isRandString = value; }
176         }
177 
178         /// <summary>
179         /// 隨機背景字符串的個數
180         /// </summary>
181         public Int32 RandomStringCount
182         {
183             get; set;
184         }
185 
186         //隨機背景字符串的大小
187         private Int32 randomStringFontSize = 9;
188         /// <summary>
189         /// 隨機背景字符串的大小
190         /// </summary>
191         public Int32 RandomStringFontSize
192         {
193             get { return randomStringFontSize; }
194             set { randomStringFontSize = value; }
195         }
196 
197         /// <summary>
198         /// 是否對圖片進行扭曲
199         /// </summary>
200         public Boolean IsTwist
201         {
202             get; set;
203         }
204 
205         /// <summary>
206         /// 邊框樣式
207         /// </summary>
208         public enum BorderStyle
209         {
210             /// <summary>
211             /// 無邊框
212             /// </summary>
213             None,
214             /// <summary>
215             /// 矩形邊框
216             /// </summary>
217             Rectangle,
218             /// <summary>
219             /// 圓角邊框
220             /// </summary>
221             RoundRectangle
222         }
223 
224         /// <summary>
225         /// 驗證碼字符串隨機轉動的角度 默認40
226         /// </summary>
227         private Int32 rotationAngle = 40;
228         /// <summary>
229         /// 驗證碼字符串隨機轉動的角度的最大值
230         /// </summary>
231         public Int32 RotationAngle
232         {
233             get { return rotationAngle; }
234             set { rotationAngle = value; }
235         }
236 
237         /// <summary>
238         /// 設置或獲取邊框樣式
239         /// </summary>
240         public BorderStyle Border
241         {
242             get; set;
243         }
244 
245         /// <summary>
246         /// 對驗證碼圖片進行高斯模糊的閥值,如果設置為0
247         /// </summary>
248         private Double gaussianDeviation = 0;
249 
250         /// <summary>
251         /// 對驗證碼圖片進行高斯模糊的閥值,如果設置為0,則不對圖片進行高斯模糊,該設置可能會對圖片處理的性能有較大影響
252         /// </summary>
253         public Double GaussianDeviation
254         {
255             get { return gaussianDeviation; }
256             set { gaussianDeviation = value; }
257         }
258         private Int32 brightnessValue = 0;
259         /// <summary>
260         /// 對圖片進行暗度和亮度的調整,如果該值為0,則不調整。該設置會對圖片處理性能有較大影響
261         /// </summary>
262         public Int32 BrightnessValue
263         {
264             get { return brightnessValue; }
265             set { brightnessValue = value; }
266         }
267 
268         #endregion
269 
270 
271         private Point[] strPoint = null;
272 
273         Random random = new Random();
274 
275         /// <summary>
276         /// 構造函數,用于初始化常用變量
277         /// </summary>
278         public void DrawValidationCode()
279         {
280             //隨機對象 
281             //Random類所取到的系統時鐘種子接近甚至完全一樣
282             //解決方案:new Random(Guid.NewGuid().GetHashCode());
283             random = new Random(Guid.NewGuid().GetHashCode());
284             //坐標數組
285             strPoint = new Point[validationCodeCount + 1];
286             if (gaussianDeviation < 0)
287                 gaussianDeviation = 0;
288         }
289 
290         /// <summary>
291         /// 生成驗證碼
292         /// 思路:多張圖片合成
293         /// 1.驗證碼背景圖片
294         /// 1.1.背景包含
295         /// 1.1.1.背景顏色
296         /// 1.1.2.噪點
297         /// 1.1.3.干擾文字
298         /// 1.1.4.干擾線條(直線、曲線)
299         /// 2.驗證碼字符
300         /// 3.驗證碼圖片扭曲
301         /// 4.驗證碼圖片模糊
302         /// 5.驗證碼圖片亮度
303         /// 6.驗證碼圖片保持在內存流中
304         /// </summary>
305         /// <param name="target">用于存儲圖片的一般字節序列</param>
306         public MemoryStream CreateImage(string code)
307         {
308             MemoryStream target = new MemoryStream();
309             // 定義圖片對象大小,
310             Bitmap bit = new Bitmap(bgWidth + 1, bgHeight + 1);
311             // 定義 Graphics(畫板)根據圖片對象 
312             dc = Graphics.FromImage(bit);
313             /*
314                 SmoothingModeAntiAlias      指定消除鋸齒的呈現。
315                 SmoothingModeDefault        指定默認模式。
316                 SmoothingModeHighQuality    指定高質量、低速度呈現。
317                 SmoothingModeHighSpeed      指定高速度、低質量呈現。
318                 SmoothingModeInvalid        指定一個無效模式。
319                 SmoothingModeNone           指定不消除鋸齒。
320             */
321             dc.SmoothingMode = SmoothingMode.HighQuality;
322             //文本的呈現模式
323             dc.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
324             // 插補模式
325             dc.InterpolationMode = InterpolationMode.HighQualityBilinear;
326             //合成圖像的呈現質量
327             dc.CompositingQuality = CompositingQuality.HighQuality;
328             try
329             {
330                 //清空畫板,指定背景色(白色)
331                 dc.Clear(Color.White);
332                 DrawValidationCode();
333                 //DrawImageUnscaled 在指定的位置使用圖像的原始物理大小繪制指定的圖像
334                 // 驗證碼背景
335                 dc.DrawImageUnscaled(DrawBackground(), 0, 0);
336                 // 驗證碼字符
337                 dc.DrawImageUnscaled(DrawRandomString(code), 0, 0);
338                 //對圖片文字進行扭曲
339                 bit = AdjustRippleEffect(bit, 5);
340                 //對圖片進行高斯模糊
341                 if (gaussianDeviation > 0)
342                 {
343                     Gaussian gau = new Gaussian();
344                     bit = gau.FilterProcessImage(gaussianDeviation, bit);
345                 }
346                 //進行暗度和亮度處理
347                 if (brightnessValue != 0)
348                 {
349                     //對圖片進行調暗處理 
350                     bit = AdjustBrightness(bit, brightnessValue);
351                 }
352                 bit.Save(target, ImageFormat.Jpeg);
353                 //輸出圖片流                    
354                 return target;
355 
356             }
357             finally
358             {
359                 //brush.Dispose();        
360                 bit.Dispose();
361                 dc.Dispose();
362             }
363         }
364 
365         #region 畫驗證碼背景,例如,增加早點,添加曲線和直線等            
366         /// <summary>
367         /// 畫驗證碼背景,例如,增加早點,添加曲線和直線等
368         /// 1.1.背景包含
369         /// 1.1.1.背景顏色
370         /// 1.1.2.噪點
371         /// 1.1.3.干擾文字
372         /// 1.1.4.干擾線條(直線、曲線)
373         /// </summary>
374         /// <returns>Bitmap 對象</returns>
375         private Bitmap DrawBackground()
376         {
377             Bitmap bit = new Bitmap(bgWidth + 1, bgHeight + 1);
378             Graphics g = Graphics.FromImage(bit);
379             g.SmoothingMode = SmoothingMode.HighQuality;
380             g.Clear(Color.White);
381             Rectangle rectangle = new Rectangle(0, 0, bgWidth, bgHeight);
382             Brush brush = new SolidBrush(backColor);
383             //填充矩形
384             g.FillRectangle(brush, rectangle);
385             //畫噪點           
386             if (isPixel)
387             {
388                 g.DrawImageUnscaled(DrawRandomPixel(30), 0, 0);
389             }
390             // 背景干擾字符
391             g.DrawImageUnscaled(DrawRandBgString(), 0, 0);
392             //畫曲線              
393             //g.DrawImageUnscaled(DrawRandomBezier(bezierCount), 0, 0);
394             //畫直線      
395             //g.DrawImageUnscaled(DrawRandomLine(lineCount), 0, 0);
396             if (Border == BorderStyle.Rectangle)
397             {
398                 //繪制邊框            
399                 g.DrawRectangle(new Pen(Color.FromArgb(90, 87, 46)), 0, 0, bgWidth, bgHeight);
400             }
401             else if (Border == BorderStyle.RoundRectangle)
402             {
403                 //畫圓角      
404                 DrawRoundRectangle(g, rectangle, Color.FromArgb(90, 87, 46), 1, 3);
405             }
406             return bit;
407         }
408         #endregion
409 
410         #region 畫隨機噪點
411         /// <summary>            
412         /// 畫隨機噪點
413         /// 在指定區域中隨機設置像素點的顏色
414         /// </summary>            
415         /// <param name="pixNum">噪點的百分比</param>            
416         /// <returns></returns>           
417         public Bitmap DrawRandomPixel(Int32 pixNum)
418         {
419             Bitmap b = new Bitmap(bgWidth, bgHeight);
420             //透明化
421             b.MakeTransparent();
422             Graphics graph = Graphics.FromImage(b);
423             graph.SmoothingMode = SmoothingMode.HighQuality;
424             graph.InterpolationMode = InterpolationMode.HighQualityBilinear;
425             //畫噪點                
426             for (int i = 0; i < (bgHeight * bgWidth) / pixNum; i++)
427             {
428                 int x = random.Next(b.Width);
429                 int y = random.Next(b.Height);
430                 //設置隨機像素點的顏色
431                 b.SetPixel(x, y, GetRandomDeepColor());
432                 //下移坐標重新畫點                    
433                 if ((x + 1) < b.Width && (y + 1) < b.Height)
434                 {
435                     //畫圖片的前景噪音點   
436                     graph.DrawRectangle(new Pen(Color.Silver), random.Next(b.Width), random.Next(b.Height), 1, 1);
437                 }
438             }
439             return b;
440         }
441         #endregion
442 
443         #region 畫干擾背景文字    
444         /// <summary>            
445         /// 畫背景干擾文字            
446         /// </summary>            
447         /// <returns></returns>           
448         private Bitmap DrawRandBgString()
449         {
450             Bitmap b = new Bitmap(bgWidth, bgHeight);
451             String[] randStr = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
452             //設置透明
453             b.MakeTransparent();
454             Graphics g = Graphics.FromImage(b);
455             g.Clear(Color.Transparent);
456             g.PixelOffsetMode = PixelOffsetMode.HighQuality;
457             g.SmoothingMode = SmoothingMode.HighQuality;
458             g.TextRenderingHint = TextRenderingHint.AntiAlias;
459             g.InterpolationMode = InterpolationMode.HighQualityBilinear;
460             //設置字體顯示格式         
461             StringFormat format = new StringFormat(StringFormatFlags.NoClip);
462             format.Alignment = StringAlignment.Center;
463             format.LineAlignment = StringAlignment.Center;
464             FontFamily f = new FontFamily(GenericFontFamilies.Serif);
465             Font textFont = new Font(f, randomStringFontSize, FontStyle.Underline);
466             int randAngle = 60; //隨機轉動角度
467             for (int i = 0; i < RandomStringCount; i++)
468             {
469                 Brush brush = new System.Drawing.SolidBrush(GetRandomLightColor());
470                 Point pot = new Point(random.Next(5, bgWidth - 5), random.Next(5, bgHeight - 5));
471                 //隨機轉動的度數                
472                 float angle = random.Next(-randAngle, randAngle);
473                 //轉動畫布                 
474                 g.RotateTransform(angle);
475                 g.DrawString(randStr[random.Next(randStr.Length)], textFont, brush, pot, format);
476                 //轉回去,為下一個字符做準備
477                 g.RotateTransform(-angle);
478                 //釋放資源
479                 brush.Dispose();
480             }
481             textFont.Dispose();
482             format.Dispose();
483             f.Dispose();
484             return b;
485         }
486         #endregion
487 
488         #region 隨機生成貝塞爾曲線           
489         /// <summary>            
490         /// 隨機生成貝塞爾曲線            
491         /// </summary>            
492         /// <param name="bmp">一個圖片的實例</param>            
493         /// <param name="lineNum">線條數量</param>            
494         /// <returns></returns>       
495         public Bitmap DrawRandomBezier(Int32 lineNum)
496         {
497             Bitmap b = new Bitmap(bgWidth, bgHeight);
498             b.MakeTransparent();
499             Graphics g = Graphics.FromImage(b);
500             g.Clear(Color.Transparent);
501             g.SmoothingMode = SmoothingMode.HighQuality;
502             g.PixelOffsetMode = PixelOffsetMode.HighQuality;
503             GraphicsPath gPath1 = new GraphicsPath();
504             Int32 lineRandNum = random.Next(lineNum);
505             for (int i = 0; i < (lineNum - lineRandNum); i++)
506             {
507                 Pen p = new Pen(GetRandomDeepColor());
508                 Point[] point = {
509                     new Point(random.Next(1, (b.Width / 10)), random.Next(1, (b.Height))),
510                     new Point(random.Next((b.Width / 10) * 2, (b.Width / 10) * 4), random.Next(1, (b.Height))),
511                     new Point(random.Next((b.Width / 10) * 4, (b.Width / 10) * 6), random.Next(1, (b.Height))),
512                     new Point(random.Next((b.Width / 10) * 8, b.Width), random.Next(1, (b.Height)))
513                 };
514                 gPath1.AddBeziers(point);
515                 g.DrawPath(p, gPath1);
516                 p.Dispose();
517             }
518             for (int i = 0; i < lineRandNum; i++)
519             {
520                 Pen p = new Pen(GetRandomDeepColor());
521                 Point[] point = {
522                     new Point(random.Next(1, b.Width), random.Next(1, b.Height)),
523                     new Point(random.Next((b.Width / 10) * 2, b.Width), random.Next(1, b.Height)),
524                     new Point(random.Next((b.Width / 10) * 4, b.Width), random.Next(1, b.Height)),
525                     new Point(random.Next(1, b.Width), random.Next(1, b.Height))
526                 };
527                 gPath1.AddBeziers(point);
528                 g.DrawPath(p, gPath1);
529                 p.Dispose();
530             }
531             return b;
532         }
533         #endregion
534 
535         #region 畫直線            
536         /// <summary>            
537         /// 畫直線            
538         /// </summary>            
539         /// <param name="bmp">一個bmp實例</param>            
540         /// <param name="lineNum">線條個數</param>            
541         /// <returns></returns>           
542         public Bitmap DrawRandomLine(Int32 lineNum)
543         {
544             if (lineNum < 0) throw new ArgumentNullException("參數bmp為空!");
545             Bitmap b = new Bitmap(bgWidth, bgHeight);
546             b.MakeTransparent();
547             Graphics g = Graphics.FromImage(b);
548             g.Clear(Color.Transparent);
549             g.PixelOffsetMode = PixelOffsetMode.HighQuality;
550             g.SmoothingMode = SmoothingMode.HighQuality;
551             for (int i = 0; i < lineNum; i++)
552             {
553                 Pen p = new Pen(GetRandomDeepColor());
554                 Point pt1 = new Point(random.Next(1, (b.Width / 5) * 2), random.Next(b.Height));
555                 Point pt2 = new Point(random.Next((b.Width / 5) * 3, b.Width), random.Next(b.Height));
556                 g.DrawLine(p, pt1, pt2);
557                 p.Dispose();
558             }
559             return b;
560         }
561         #endregion
562 
563         #region 寫入驗證碼的字符串            
564         /// <summary>            
565         /// 寫入驗證碼的字符串            
566         /// </summary>            
567         private Bitmap DrawRandomString(string Code)
568         {
569             if (fontMaxSize >= (bgHeight / 5) * 4)
570                 throw new ArgumentException("字體最大值參數FontMaxSize與驗證碼高度相近,這會導致描繪驗證碼字符串時出錯,請重新設置參數!");
571             Bitmap b = new Bitmap(bgWidth, bgHeight);
572             b.MakeTransparent();
573             Graphics g = Graphics.FromImage(b);
574             g.Clear(Color.Transparent);
575             g.PixelOffsetMode = PixelOffsetMode.Half;
576             g.SmoothingMode = SmoothingMode.HighQuality;
577             g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
578             g.InterpolationMode = InterpolationMode.HighQualityBilinear;
579             chars = Code.ToCharArray();            //拆散字符串成單字符數組     
580             validationCode = chars.ToString();
581             //設置字體顯示格式            
582             StringFormat format = new StringFormat(StringFormatFlags.NoClip);
583             format.Alignment = StringAlignment.Center;
584             format.LineAlignment = StringAlignment.Center;
585             FontFamily f = new FontFamily(GenericFontFamilies.Monospace);
586             Int32 charNum = chars.Length;
587             Point sPoint = new Point();
588             Int32 fontSize = 12;
589             validationCodeCount = charNum;
590             for (int i = 0; i < validationCodeCount; i++)
591             {
592                 //定義字體                 
593                 Font textFont = new Font(f, random.Next(fontMinSize, fontMaxSize), FontStyle.Bold);
594                 //定義畫刷,用于寫字符串          
595                 //Brush brush = new SolidBrush(GetRandomDeepColor());    
596                 Int32 textFontSize = Convert.ToInt32(textFont.Size);
597                 fontSize = textFontSize;
598                 //Point point = new Point(random.Next((bgWidth / charNum) * i + 5, (bgWidth / charNum) * (i + 1)), random.Next(bgHeight / 5 + textFontSize / 2, bgHeight - textFontSize / 2));
599                 // 字符位置坐標
600                 Point point = new Point(random.Next((bgWidth / charNum) * i + 2, (bgWidth / charNum) * (i + 1) - (textFontSize / 2)), random.Next(bgHeight / 5 + textFontSize / 2, bgHeight - textFontSize / 2));
601                 //如果當前字符X坐標小于字體的二分之一大小     
602                 if (point.X < textFontSize / 2)
603                 {
604                     point.X = point.X + textFontSize / 2;
605                 }
606                 //防止文字疊加         
607                 if (i > 0 && (point.X - sPoint.X < (textFontSize / 2 + textFontSize / 2)))
608                 {
609                     point.X = point.X + textFontSize;
610                 }
611                 //如果當前字符X坐標大于圖片寬度,就減去字體的寬度        
612                 if (point.X > (bgWidth - textFontSize / 2))
613                 {
614                     point.X = bgWidth - textFontSize / 2;
615                 }
616                 sPoint = point;
617                 float angle = random.Next(-rotationAngle, rotationAngle);//轉動的度數   
618                 g.TranslateTransform(point.X, point.Y);
619                 g.RotateTransform(angle);
620 
621                 Rectangle myretang = new Rectangle(0, 1, Convert.ToInt32(textFont.Size), Convert.ToInt32(textFont.Size));
622                 Color c = GetRandomDeepColor();
623                 //設置漸變畫刷
624                 LinearGradientBrush mybrush2 = new LinearGradientBrush(myretang, c, GetLightColor(c, 120), random.Next(180));
625                 g.DrawString(chars[i].ToString(), textFont, mybrush2, 1, 1, format);
626 
627                 g.RotateTransform(-angle);//轉回去
628                 g.TranslateTransform(-point.X, -point.Y);//移動光標到指定位置,每個字符緊湊顯示,避免被軟件識別
629                 strPoint[i] = point;
630                 textFont.Dispose();
631                 mybrush2.Dispose();
632             }
633             return b;
634         }
635         #endregion
636 
637         #region 增加或減少亮度
638         /// <summary>            
639         /// 增加或減少亮度            
640         /// </summary>            
641         /// <param name="img">System.Drawing.Image Source </param>           
642         /// <param name="valBrightness">0~255</param>            
643         /// <returns></returns>       
644         public System.Drawing.Bitmap AdjustBrightness(System.Drawing.Image img, int valBrightness)
645         {
646             // 讀入欲轉換的圖片並轉成為 Bitmap             
647             System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(img);
648             for (int y = 0; y < bitmap.Height; y++)
649             {
650                 for (int x = 0; x < bitmap.Width; x++)
651                 {
652                     // 取得每一個 pixel         
653                     var pixel = bitmap.GetPixel(x, y);
654                     // 判斷 如果處理過後 255 就設定為 255 如果小於則設定為 0         
655                     var pR = ((pixel.R + valBrightness > 255) ? 255 : pixel.R + valBrightness) < 0 ? 0 : ((pixel.R + valBrightness > 255) ? 255 : pixel.R + valBrightness);
656                     var pG = ((pixel.G + valBrightness > 255) ? 255 : pixel.G + valBrightness) < 0 ? 0 : ((pixel.G + valBrightness > 255) ? 255 : pixel.G + valBrightness);
657                     var pB = ((pixel.B + valBrightness > 255) ? 255 : pixel.B + valBrightness) < 0 ? 0 : ((pixel.B + valBrightness > 255) ? 255 : pixel.B + valBrightness);
658                     // 將改過的 RGB 寫回         
659                     System.Drawing.Color newColor = System.Drawing.Color.FromArgb(pixel.A, pR, pG, pB);
660                     bitmap.SetPixel(x, y, newColor);
661                 }
662             }
663             // 回傳結果      
664             return bitmap;
665         }
666         #endregion
667 
668         #region 水波紋效果    
669         /// <summary>           
670         /// 水波紋效果            
671         /// </summary>            
672         /// <param name="src"></param>            
673         /// <param name="nWave">坡度</param>            
674         /// www.it165.net            
675         /// <returns></returns>            
676         public Bitmap AdjustRippleEffect(Bitmap src, short nWave)
677         {
678             int nWidth = src.Width;
679             int nHeight = src.Height;
680             // 透過公式進行水波紋的採樣             
681             PointF[,] fp = new PointF[nWidth, nHeight];
682             Point[,] pt = new Point[nWidth, nHeight];
683             Point mid = new Point();
684             mid.X = nWidth / 2;
685             mid.Y = nHeight / 2;
686             double newX, newY;
687             double xo, yo;
688             //先取樣將水波紋座標跟RGB取出  
689             for (int x = 0; x < nWidth; ++x)
690                 for (int y = 0; y < nHeight; ++y)
691                 {
692                     xo = ((double)nWave * Math.Sin(2.0 * 3.1415 * (float)y / 128.0));
693                     yo = ((double)nWave * Math.Cos(2.0 * 3.1415 * (float)x / 128.0));
694                     newX = (x + xo);
695                     newY = (y + yo);
696                     if (newX > 0 && newX < nWidth)
697                     {
698                         fp[x, y].X = (float)newX;
699                         pt[x, y].X = (int)newX;
700                     }
701                     else
702                     {
703                         fp[x, y].X = (float)0.0;
704                         pt[x, y].X = 0;
705                     }
706                     if (newY > 0 && newY < nHeight)
707                     {
708                         fp[x, y].Y = (float)newY;
709                         pt[x, y].Y = (int)newY;
710                     }
711                     else
712                     {
713                         fp[x, y].Y = (float)0.0;
714                         pt[x, y].Y = 0;
715                     }
716                 }
717             //進行合成              
718             Bitmap bSrc = (Bitmap)src.Clone();
719             // 依照 Format24bppRgb 每三個表示一 Pixel 0: 藍 1: 綠 2: 紅   
720             BitmapData bitmapData = src.LockBits(new Rectangle(0, 0, src.Width, src.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
721             BitmapData bmSrc = bSrc.LockBits(new Rectangle(0, 0, bSrc.Width, bSrc.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
722             int scanline = bitmapData.Stride;
723             IntPtr Scan0 = bitmapData.Scan0;
724             IntPtr SrcScan0 = bmSrc.Scan0;
725             //指針在c#中是不提倡使用的,有關指針的操作被認為是不安全的(unsafe)。因此運行這段代碼之前,先要改一個地方,否則編譯不過無法運行。
726             //修改方法:找到你的項目,在項目圖標上點右鍵,選項目屬性(Properties),Build標簽頁里把Allow unsafe code勾選上
727             unsafe
728             {
729                 //指針
730                 byte* p = (byte*)(void*)Scan0;
731                 byte* pSrc = (byte*)(void*)SrcScan0;
732                 int nOffset = bitmapData.Stride - src.Width * 3;
733                 int xOffset, yOffset;
734                 for (int y = 0; y < nHeight; ++y)
735                 {
736                     for (int x = 0; x < nWidth; ++x)
737                     {
738                         xOffset = pt[x, y].X;
739                         yOffset = pt[x, y].Y;
740                         if (yOffset >= 0 && yOffset < nHeight && xOffset >= 0 && xOffset < nWidth)
741                         {
742                             p[0] = pSrc[(yOffset * scanline) + (xOffset * 3)];
743                             p[1] = pSrc[(yOffset * scanline) + (xOffset * 3) + 1];
744                             p[2] = pSrc[(yOffset * scanline) + (xOffset * 3) + 2];
745                         }
746                         p += 3;
747                     }
748                     p += nOffset;
749                 }
750             }
751             src.UnlockBits(bitmapData);
752             bSrc.UnlockBits(bmSrc);
753             return src;
754         }
755         #endregion
756 
757         #region 生成隨機字符串
758         /// <summary>            
759         /// 生成隨機字符串                
760         /// </summary>            
761         /// <returns></returns>            
762         public string GetRandomString(Int32 textLength)
763         {
764             string[] randomArray = charCollection.Split(','); //將字符串生成數組        
765             int arrayLength = randomArray.Length;
766             string randomString = "";
767             for (int i = 0; i < textLength; i++)
768             {
769                 randomString += randomArray[random.Next(0, arrayLength)];
770             }
771             return randomString; //長度是textLength +1          
772         }
773         #endregion
774 
775         #region 隨機生成顏色值    
776         /// <summary>      
777         /// 生成隨機深顏色            
778         /// </summary>            
779         /// <returns></returns>  
780         public Color GetRandomDeepColor()
781         {
782             int nRed, nGreen, nBlue;
783             // nBlue,nRed  nGreen 相差大一點 nGreen 小一些    
784             //int high = 255;                     
785             int redLow = 160;
786             int greenLow = 100;
787             int blueLow = 160;
788             nRed = random.Next(redLow);
789             nGreen = random.Next(greenLow);
790             nBlue = random.Next(blueLow);
791             Color color = Color.FromArgb(nRed, nGreen, nBlue);
792             return color;
793         }
794         /// <summary>            
795         /// 生成隨機淺顏色            
796         /// </summary>            
797         /// <returns>randomColor</returns>     
798         public Color GetRandomLightColor()
799         {
800             int nRed, nGreen, nBlue;
801             //越大顏色越淺       
802             int low = 180;            //色彩的下限              
803             int high = 255;            //色彩的上限          
804             nRed = random.Next(high) % (high - low) + low;
805             nGreen = random.Next(high) % (high - low) + low;
806             nBlue = random.Next(high) % (high - low) + low;
807             Color color = Color.FromArgb(nRed, nGreen, nBlue);
808             return color;
809         }
810         /// <summary>            
811         /// 獲取與當前顏色值相加后的顏色            
812         /// </summary>            
813         /// <param name="c"></param>            
814         /// <returns></returns>           
815         public Color GetLightColor(Color c, Int32 value)
816         {
817             int nRed = c.R, nGreen = c.G, nBlue = c.B;
818             //越大顏色越淺               
819             if (nRed + value < 255 && nRed + value > 0)
820             {
821                 nRed = c.R + 40;
822             }
823             if (nGreen + value < 255 && nGreen + value > 0)
824             {
825                 nGreen = c.G + 40;
826             }
827             if (nBlue + value < 255 && nBlue + value > 0)
828             {
829                 nBlue = c.B + 40;
830             }
831             Color color = Color.FromArgb(nRed, nGreen, nBlue);
832             return color;
833         }
834         #endregion
835 
836         #region 繪制圓角矩形      
837         /// <summary>            
838         /// C# GDI+ 繪制圓角矩形            
839         /// </summary>            
840         /// <param name="g">Graphics 對象</param>           
841         /// <param name="rectangle">Rectangle 對象,圓角矩形區域</param>           
842         /// <param name="borderColor">邊框顏色</param>            
843         /// <param name="borderWidth">邊框寬度</param>            
844         /// <param name="r">圓角半徑</param>           
845         private static void DrawRoundRectangle(Graphics g, Rectangle rectangle, Color borderColor, float borderWidth, int r)
846         {
847             // 如要使邊緣平滑,請取消下行的注釋      
848             g.SmoothingMode = SmoothingMode.HighQuality;  
849             Pen p = new Pen(borderColor, borderWidth);
850             // 調用 getRoundRectangle 得到圓角矩形的路徑,然后再進行繪制     
851             g.DrawPath(p, getRoundRectangle(rectangle, r));
852         }
853         #endregion
854 
855         #region 根據普通矩形得到圓角矩形的路徑      
856         /// <summary>            
857         /// 根據普通矩形得到圓角矩形的路徑            
858         /// </summary>           
859         /// <param name="rectangle">原始矩形</param>
860         /// <param name="r">半徑</param>     
861         /// <returns>圖形路徑</returns> 
862         private static GraphicsPath getRoundRectangle(Rectangle rectangle, int r)
863         {
864             int l = 2 * r;
865             // 把圓角矩形分成八段直線、弧的組合,依次加到路徑中           
866             GraphicsPath gp = new GraphicsPath();
867             gp.AddLine(new Point(rectangle.X + r, rectangle.Y), new Point(rectangle.Right - r, rectangle.Y));
868             gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Y, l, l), 270F, 90F);
869             gp.AddLine(new Point(rectangle.Right, rectangle.Y + r), new Point(rectangle.Right, rectangle.Bottom - r));
870             gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Bottom - l, l, l), 0F, 90F);
871             gp.AddLine(new Point(rectangle.Right - r, rectangle.Bottom), new Point(rectangle.X + r, rectangle.Bottom));
872             gp.AddArc(new Rectangle(rectangle.X, rectangle.Bottom - l, l, l), 90F, 90F);
873             gp.AddLine(new Point(rectangle.X, rectangle.Bottom - r), new Point(rectangle.X, rectangle.Y + r));
874             gp.AddArc(new Rectangle(rectangle.X, rectangle.Y, l, l), 180F, 90F);
875             return gp;
876         }
877         #endregion
878     }
View Code

調用

1         private void frmValidateCode_Load(object sender, EventArgs e)
2         {
3             ValidateCode vCode = new ValidateCode();
4             string code = vCode.GetRandomString(5);
5             MemoryStream stream = vCode.CreateImage(code);
6             pictureBox1.Image = new Bitmap(stream);
7         }

效果

?

轉載于:https://www.cnblogs.com/WarBlog/p/11189717.html

總結

以上是生活随笔為你收集整理的戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

中文字幕精品三级久久久 | 2019av在线视频 | 免费精品久久久 | 天天干天天摸 | 国产精品久久视频 | 99精品国产一区二区三区麻豆 | 免费高清在线视频一区· | 国产精品久久久久久久7电影 | 在线免费观看视频一区二区三区 | 亚洲精品资源在线观看 | 99久久99久久精品免费 | 国产精品久久在线 | 天天操 夜夜操 | 九九综合久久 | 午夜视频在线观看一区二区 | 色综合天天狠天天透天天伊人 | 色99之美女主播在线视频 | 美女黄频视频大全 | www.激情五月.com | 午夜在线国产 | 四虎最新域名 | 国产精品久久久久久久久久久久久久 | 天天操天操 | 中文字幕成人在线观看 | 九九视频免费观看视频精品 | 国产乱老熟视频网88av | 在线中文字幕一区二区 | 亚洲永久精品一区 | 国产成人在线播放 | 天天天天射 | 91免费观看网站 | 亚洲va韩国va欧美va精四季 | 日韩av电影网站在线观看 | 国内三级在线观看 | 成年人网站免费在线观看 | 日韩区在线观看 | 在线免费亚洲 | 综合在线色 | 黄色大片免费播放 | 中文字幕在线播出 | 国产在线精品区 | 亚洲视频一级 | 国精产品一二三线999 | 亚洲欧美国产日韩在线观看 | 欧美久久99 | 91精品婷婷国产综合久久蝌蚪 | 在线观看免费高清视频大全追剧 | 在线看的av网站 | 黄色一区二区在线观看 | 欧美a性 | 亚洲精品国偷自产在线99热 | 国产一区二区综合 | 国产日韩在线一区 | 色婷婷免费 | 亚洲精品在线播放视频 | 日韩精品综合在线 | 亚洲精品综合一二三区在线观看 | 久久久久久久久久亚洲精品 | 日本中文字幕在线看 | 麻花豆传媒一二三产区 | 国产精品午夜在线观看 | 亚洲一区 影院 | 国产区久久 | 国产精品美女久久久久久久 | 97超碰总站 | 日批视频在线播放 | 日韩av片免费在线观看 | 国产精品久久久久久久久久久久 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 亚洲高清视频一区二区三区 | 国产色久 | 日日干天天射 | 国产一区二区三区午夜 | 午夜影院一级 | 欧美一区二区三区免费看 | 天天色天天骑天天射 | 五月综合久久 | 精精国产xxxx视频在线播放 | 99热只有精品在线观看 | 中文字幕在线观看国产 | 97天天综合网 | 999久久精品 | 久久爱影视i | 日韩视频在线观看视频 | 国产精品中文久久久久久久 | 亚洲毛片久久 | 欧美另类xxxx | 久久精品老司机 | 九九久久免费 | 手机成人av| 在线观看视频一区二区 | 最近更新的中文字幕 | 99精品一级欧美片免费播放 | 一区二区三区四区精品 | 日韩免费成人 | 在线观看你懂的网址 | 亚洲a成人v | 天天色天天操综合 | 免费男女羞羞的视频网站中文字幕 | 欧美日本一区 | 亚洲国产精品va在线看黑人动漫 | 久久久久久麻豆 | 久久夜色电影 | 99免费国产 | 免费视频久久久 | 久草在线视频资源 | 久久久久久精 | 日韩av一区二区在线播放 | 亚洲激情在线观看 | 狠狠色综合网站久久久久久久 | 日韩中文字幕在线 | 激情五月婷婷综合网 | 91九色在线视频观看 | 在线观看视频你懂的 | 久久久国际精品 | 国产精品精 | 久久国产香蕉视频 | 欧美精品久久久久久久久老牛影院 | 在线黄色av电影 | www五月天婷婷 | 国产成人精品一区二区三区 | 成+人+色综合 | 在线观看免费av网站 | 国产精品免费在线观看视频 | 免费av片在线 | 国产专区视频 | 五月天堂色 | 欧美午夜久久久 | 免费在线观看成年人视频 | 国产免费观看久久 | 91精品久久久久久久91蜜桃 | 亚洲精品福利在线 | 蜜桃av人人夜夜澡人人爽 | 国产日韩精品一区二区三区 | 国产一区二区精品91 | 综合网伊人 | 中文字幕日韩免费视频 | 日韩色中色 | 国产视频资源 | 成人黄色电影免费观看 | 91爱爱网址 | 91看片淫黄大片91 | 精品夜夜嗨av一区二区三区 | 久久综合中文字幕 | 久久久久国产a免费观看rela | 狠狠干狠狠插 | 黄色成人毛片 | 色噜噜日韩精品一区二区三区视频 | 国产成人免费网站 | 日韩网站在线观看 | 免费亚洲一区二区 | www.久久91| 91看片在线播放 | 亚洲欧美综合精品久久成人 | 最近中文字幕免费观看 | 亚洲黄色成人网 | 国产一区二区高清不卡 | 911免费视频 | 草久视频在线观看 | 亚洲精品在线免费观看视频 | 欧美性色综合网 | 国产精品亚州 | 欧美一区二区三区特黄 | 久久综合天天 | 国产不卡在线播放 | 亚洲精品乱码久久久久久按摩 | 久久久久久久久艹 | 日韩在线视频免费播放 | 日韩另类在线 | 色噜噜色噜噜 | 91人网站| 伊人色**天天综合婷婷 | 激情综合婷婷 | 成人在线观看资源 | www.亚洲精品 | 中文字幕av一区二区三区四区 | 亚洲久久视频 | 亚洲精品va | 久久精品人人做人人综合老师 | 亚洲日本va在线观看 | 在线看片成人 | 欧美一区二区三区免费看 | 99久久99热这里只有精品 | 99超碰在线播放 | 久久久av电影 | 96国产精品 | 国产精品一区二区果冻传媒 | 久久情爱 | 久久精品中文 | 午夜色站 | 在线观看国产中文字幕 | 欧美性爽爽 | 日韩高清不卡一区二区三区 | 91视频91色 | 国产最新精品视频 | 日韩av手机在线观看 | 日韩精品一区二区三区三炮视频 | 亚洲伦理一区 | 亚洲激精日韩激精欧美精品 | 亚洲毛片视频 | 亚洲乱码一区 | 美女福利视频一区二区 | 激情久久影院 | 91香蕉视频 mp4 | 青青河边草免费直播 | 欧美成年黄网站色视频 | 毛片网站观看 | 2024av | 国产精品99在线播放 | 欧美巨乳网| 亚洲欧洲成人 | 97精品国自产拍在线观看 | 日本护士撒尿xxxx18 | 日本大尺码专区mv | 中文字幕久久精品 | 五月的婷婷 | 亚洲美女在线国产 | 最新国产一区二区三区 | 99免费看片 | 精品国产亚洲一区二区麻豆 | 国产精品资源网 | 中文字幕久久精品 | 久久国产精品二国产精品中国洋人 | 97精品国产97久久久久久久久久久久 | 综合激情 | 美女视频一区二区 | 婷婷草| 黄色毛片在线 | 国产一区二区不卡在线 | 午夜久久久久久久久久久 | 色在线最新| 精品国产伦一区二区三区免费 | 婷婷丁香狠狠爱 | 久久综合九色综合欧美就去吻 | 国内外成人免费在线视频 | 五月婷婷在线播放 | av免费网站在线观看 | 天天色天天骑天天射 | 亚洲伦理一区二区 | 日本性生活免费看 | av一区二区三区在线 | 欧美一进一出抽搐大尺度视频 | 综合久久一本 | 我要看黄色一级片 | 色综合天天综合网国产成人网 | 亚洲狠狠婷婷 | 欧美综合在线观看 | 91麻豆精品国产自产 | 亚洲激情在线视频 | 在线午夜 | 亚洲情影院| 国产成人免费在线 | 国产男女无遮挡猛进猛出在线观看 | 在线成人看片 | 久久精品国产精品亚洲 | 蜜臀av性久久久久av蜜臀三区 | 99久免费精品视频在线观看 | 国产一级免费观看 | 久久久久久蜜桃一区二区 | 国产资源在线观看 | 韩国精品视频在线观看 | 国产免费成人av | 日韩女同一区二区三区在线观看 | 国产精品18久久久久vr手机版特色 | 日韩精品免费一区 | 91成人精品 | 人人插超碰 | 国产亚洲免费的视频看 | 亚洲精品88欧美一区二区 | 六月丁香激情综合色啪小说 | www日韩| av丝袜在线 | 97国产大学生情侣白嫩酒店 | 久久tv视频| 成人在线免费看视频 | 日韩毛片在线免费观看 | 激情综合网色播五月 | 欧美日韩久久不卡 | 九九热免费观看 | 国内视频在线观看 | 精品国产成人av | 色综合久久99 | 国产精品黄色影片导航在线观看 | 免费看色网站 | 欧美作爱视频 | 久久香蕉国产精品麻豆粉嫩av | www.夜夜草 | 999久久久免费精品国产 | 一区二区不卡在线观看 | 国产在线观看你懂得 | 超碰在线观看av | av导航福利 | 在线视频免费观看 | 99午夜| 色爱成人网 | 91一区二区三区久久久久国产乱 | 欧美日韩一区三区 | 99热99re6国产在线播放 | 久久久久国产精品视频 | 在线天堂中文在线资源网 | 日韩午夜小视频 | 亚洲91中文字幕无线码三区 | 狠狠色丁香久久婷婷综合_中 | 97人人模人人爽人人喊网 | 97在线公开视频 | 久久国产精品二国产精品中国洋人 | 91片黄在线观看动漫 | 日韩中文字幕免费视频 | wwwwwww黄 | 免费成视频 | 高清不卡一区二区三区 | 久久久国产精品麻豆 | 色综合天天干 | 最近中文字幕久久 | 日韩影视在线 | 亚洲欧美日韩一二三区 | 国内精品久久久久久久影视麻豆 | 日韩二区在线 | 国产福利在线免费 | 日韩在线高清免费视频 | 探花视频在线观看免费 | 久久久精品久久 | 狠狠色丁香婷婷综合久久片 | www.色综合.com | 国产精品久久久久久久午夜 | 一区二区三区在线观看中文字幕 | 超碰999 | av色影院 | 天天爽天天爽 | 丁香婷婷激情啪啪 | 日韩欧美综合精品 | 精品视频免费在线 | av丝袜美腿 | 91亚洲精品在线观看 | 日韩一二区在线观看 | 五月综合色婷婷 | 国产精品99久久久久久有的能看 | 男女啪啪免费网站 | 欧美日韩三级 | 国产福利精品一区二区 | 狠狠色丁香久久婷婷综合丁香 | 在线免费观看的av | 久草资源在线观看 | 色 免费观看 | 免费观看午夜视频 | 91豆麻精品91久久久久久 | 五月天电影免费在线观看一区 | 黄色官网在线观看 | 国产精品福利久久久 | 国产不卡在线播放 | 国内成人精品2018免费看 | 狠狠干婷婷 | 麻豆va一区二区三区久久浪 | 人人舔人人舔 | 国产福利在线不卡 | 国产激情小视频在线观看 | 九九精品久久久 | 成人av亚洲 | av 一区 二区 久久 | 青青色影院 | 激情久久久久久久久久久久久久久久 | 在线看毛片网站 | 国产精品久久精品国产 | 亚洲成人高清在线 | 欧美一级电影在线观看 | 久久久久国 | 国产精品va视频 | 国产精品热 | 久久人人爽人人片av | 最新av中文字幕 | 久久黄色免费 | 久久婷婷一区二区三区 | 免费三级黄色片 | 中文字幕高清 | 国产精品免费av | 国产aaa免费视频 | 国产91免费在线 | 色吧av色av | 一级淫片在线观看 | 99视频精品免费视频 | 欧美韩日视频 | 免费a v网站 | 成人毛片一区 | 精品国产一区二区三区噜噜噜 | av高清在线观看 | 成人aⅴ视频 | 亚洲视频综合在线 | 国产精品中文字幕在线播放 | 五月天伊人网 | 国产精品久久久久久欧美 | www毛片com| 国产精品 中文字幕 亚洲 欧美 | 美女免费视频一区二区 | 天天插狠狠干 | 婷婷 中文字幕 | av色综合| 日韩欧美在线综合网 | 日b视频国产 | 西西4444www大胆视频 | 久久婷婷色综合 | 亚洲欧美日韩国产一区二区三区 | 久久综合导航 | 91传媒在线播放 | 激情偷乱人伦小说视频在线观看 | 福利视频一区二区 | 中文字幕免费一区二区 | 91正在播放 | 性色av一区二区三区在线观看 | 有码中文字幕 | 中文字幕一区二区三区四区视频 | 国产成人免费在线观看 | 久久免费国产精品1 | 香蕉一区 | 五月婷婷视频在线观看 | 久久久国产精品视频 | 午夜的福利 | 一级黄色大片在线观看 | 三级黄免费看 | 日韩成人在线免费观看 | 欧美色图东方 | av成年人电影 | 成人免费看黄 | 日韩欧美99 | 日韩免费一区二区在线观看 | 国产精品2区| 天天综合精品 | 久久国产三级 | 丁香婷婷激情 | 99视频精品全部免费 在线 | 一级黄色网址 | 91在线视频免费 | 欧美在线视频一区二区 | 日韩在线观看 | 免费a视频在线观看 | 亚洲欧美成人在线 | 91av在线不卡 | 天天干,天天操 | 久久久久国产一区二区 | 天天干天天弄 | 91av社区 | 在线观看视频国产 | 欧美视频二区 | 精品亚洲一区二区 | 久久久久亚洲国产精品 | 激情五月在线视频 | 月下香电影 | 337p日本欧洲亚洲大胆裸体艺术 | 中文字幕91在线 | 久久 国产一区 | 丝袜网站在线观看 | 9999免费视频 | 国产午夜麻豆影院在线观看 | 国产特级毛片aaaaaa毛片 | 五月婷婷中文 | 日日干天天插 | 久久久毛片 | 九九久久免费 | 在线精品在线 | 国产精品精品 | 久久国产精品成人免费浪潮 | 在线天堂中文在线资源网 | 99久久精品国产一区 | 午夜久久久久久久久久影院 | 免费人做人爱www的视 | 久久无码av一区二区三区电影网 | 99久久精品免费看国产免费软件 | 亚洲视频 在线观看 | 色午夜 | 特黄色大片 | 五月婷在线观看 | 久久天天综合网 | 久久精品免费观看 | 在线v片 | 97碰在线 | 亚洲成人精品久久久 | 又黄又爽的免费高潮视频 | 成人h电影在线观看 | 波多野结衣在线视频一区 | 国产一区二区在线看 | 久久影视网| 激情开心| 久久综合久久鬼 | 免费黄a大片 | 国产黄色片一级 | 999ZYZ玖玖资源站永久 | 日韩视频免费播放 | 日韩午夜av电影 | 黄色毛片视频免费观看中文 | 中文字幕韩在线第一页 | 免费欧美精品 | 特级aaa毛片 | 欧美一区二区免费在线观看 | 天天操夜夜操天天射 | 欧美日韩激情视频8区 | 爱色av.com| 91九色国产在线 | 久久精品久久精品久久39 | 亚洲一区免费在线 | 极品美女被弄高潮视频网站 | 国产91对白在线 | 一区二区三区四区在线免费观看 | av中文字幕日韩 | 欧美9999| 在线 成人| 亚洲成色777777在线观看影院 | 久久精彩免费视频 | av电影 一区二区 | 天天天天色射综合 | 91麻豆精品一区二区三区 | 天天操天天操天天操天天操 | 久久久美女 | 亚洲高清国产视频 | 亚洲精品免费在线视频 | 久久久久久久久免费 | 久国产在线播放 | 国产精品免费视频一区二区 | 最近最新中文字幕视频 | 国产视频九色蝌蚪 | 国产精品一区二区三区观看 | 精品亚洲一区二区 | 日韩理论在线视频 | 娇妻呻吟一区二区三区 | 国产精品一区二区美女视频免费看 | 久久国产精品二国产精品中国洋人 | 国产精品综合在线 | 波多野结衣在线观看视频 | 伊人黄色网 | 超碰在97 | 中文字幕精品一区久久久久 | 超级碰视频 | 成人羞羞免费 | 天海翼一区二区三区免费 | 久草在线久草在线2 | 92国产精品久久久久首页 | 在线黄色观看 | 亚洲视频 中文字幕 | 在线亚洲日本 | 国产亚洲免费的视频看 | 在线中文字母电影观看 | 国产97色在线 | 97av影院 | 日韩精品一区二区三区免费观看 | 亚洲一区二区三区四区在线视频 | 亚洲一级电影在线观看 | 亚洲一区尤物 | 热久久国产| 六月天综合网 | 中文字幕一区二区三区四区久久 | 日韩电影在线观看一区 | 天天射天天爽 | 久久少妇免费视频 | 99视频一区 | 日日夜夜综合网 | 国产视频美女 | 久久国产精品免费一区二区三区 | 久久精品毛片 | 国产视频在线播放 | 国产护士在线 | 天堂av官网 | 日本美女xx| 成人一级片在线观看 | 高清久久久久久 | 成人精品国产 | 国产精品专区h在线观看 | 丁香影院在线 | 日韩高清无线码2023 | 久久国产精品二国产精品中国洋人 | 久草视频免费看 | av电影免费在线看 | 精品一二三四五区 | 久久精品99国产精品酒店日本 | 中文在线最新版天堂 | 国产69精品久久久久久久久久 | 99视频精品全部免费 在线 | 亚洲另类视频在线 | 国产成人精品久久久 | 久久一级电影 | 一区二区视频在线观看免费 | 黄色大全在线观看 | 久久综合久久久 | 亚州av免费 | 婷婷综合| 天天视频亚洲 | 国模一区二区三区四区 | 九九免费精品 | 欧美精品久久久久久久久久丰满 | 国产精品久久网 | 97色在线观看免费视频 | 精品国产一二三四区 | 欧美经典久久 | 中文字幕av一区二区三区四区 | 欧美日韩亚洲在线观看 | 亚洲免费小视频 | 欧美精品乱码久久久久久 | 欧美日韩国产精品一区 | 中文字幕国产 | 午夜精品一区二区三区在线播放 | 成人av电影免费观看 | 五月婷婷亚洲 | 九九视频一区 | 久久久18| 99精品免费视频 | 久久精品国产免费 | 成人在线电影观看 | 人人干人人做 | a极黄色片| 456成人精品影院 | 国产精品久久久毛片 | 国产亚洲精品久久19p | 精品五月天 | 精品在线视频一区二区三区 | 国产精品av在线免费观看 | 成人av资源网站 | 久久高清免费观看 | 国内精品久久久久久中文字幕 | 91桃花视频| 日韩久久久久久久久 | 91在线看网站 | 免费看在线看www777 | 日日夜夜骑 | 亚州成人av在线 | 婷婷激情久久 | 国产精品三级视频 | 国产色女 | 国产精品成人在线观看 | 久久综合久久综合这里只有精品 | 天天干天天草天天爽 | 国产精品video爽爽爽爽 | 综合国产视频 | 狠狠躁18三区二区一区ai明星 | 日本精品一二区 | 亚洲精品玖玖玖av在线看 | 国产精品成人久久久久久久 | 九草视频在线观看 | 欧美analxxxx | 亚洲精品黄网站 | 91av在线免费看 | 色多视频在线观看 | 免费国产一区二区 | 成人三级黄色 | 天天干天天在线 | 激情综合五月 | 中文字幕在线免费观看 | 麻豆视频91| 日韩四虎| 五月激情亚洲 | 91亚洲精| 国产午夜精品av一区二区 | 国产美女永久免费 | 在线免费观看国产黄色 | 天天操天天操天天操天天 | 久草网在线观看 | 亚洲最新av在线网站 | 日本精品中文字幕在线观看 | 欧美精品久久久久久久久久白贞 | 伊人在线视频 | 国产免费又爽又刺激在线观看 | 在线导航福利 | 久久免费视频网站 | 五月香婷 | 91精品一区国产高清在线gif | 波多野结衣视频一区二区 | 日韩欧三级 | 国产专区在线看 | 中文字幕在线观看视频一区 | 91成年视频 | 久久精品专区 | wwwww.国产| 成人午夜av电影 | 黄色影院在线免费观看 | 国产精品一二 | 久久国产欧美日韩 | 探花在线观看 | 亚洲国产婷婷 | 狠狠色香婷婷久久亚洲精品 | 久久婷五月 | 久久久久欠精品国产毛片国产毛生 | 99精品影视 | 日本特黄一级片 | 最近中文字幕免费大全 | 久久露脸国产精品 | 亚洲欧美乱综合图片区小说区 | 亚洲精品在线视频网站 | 亚洲国产精品成人精品 | 亚州av成人 | www免费网站在线观看 | 在线观看一二三区 | 亚洲精品一区二区三区在线观看 | 免费看久久 | 伊人永久 | 月丁香婷婷 | 97精品国产97久久久久久春色 | 欧美日韩国产成人 | 在线观看中文字幕视频 | 亚洲婷婷综合色高清在线 | 国内精品久久久久影院一蜜桃 | 成 人 免费 黄 色 视频 | www.久久91| 99 精品 在线 | 婷婷免费在线视频 | 99福利片| 中文字幕在线观看你懂的 | 三级av网| 丁香婷婷激情 | 国产麻豆电影在线观看 | 亚洲精品视频免费 | 人人爱人人射 | 亚洲一二区精品 | 狠狠狠色丁香婷婷综合久久五月 | 国产亚洲精品久久久久久久久久久久 | 国产不卡精品 | 成人黄色电影免费观看 | 免费亚洲片| 一区二区视频在线播放 | 欧美日韩国产一二 | 91免费视频网站在线观看 | 国内精品久久久久久久影视麻豆 | 日日爽视频 | 黄色网址a | 婷婷久久久 | 天天操天天草 | 久久久久久久久久网站 | 最近中文字幕免费视频 | 国内精品小视频 | 成人中文字幕在线观看 | 免费精品在线视频 | av片在线看 | 伊人天天操| 国产呻吟在线 | 91综合久久一区二区 | 色a在线观看 | 亚洲理论片 | 黄色软件在线观看免费 | 久久五月天综合 | 97超碰影视 | 国产午夜激情视频 | 中文av日韩| 国产福利一区二区三区在线观看 | 最近字幕在线观看第一季 | 最新国产精品拍自在线播放 | 日韩精品免费在线观看视频 | 国产麻豆电影在线观看 | 国产精品123 | 欧美最新大片在线看 | 天天干天天摸 | 成 人 免费 黄 色 视频 | 久久久久久久电影 | 国产精品mm | 韩日视频在线 | av中文天堂 | 亚洲精品黄 | 国产一级片不卡 | 91成人精品一区在线播放69 | 激情五月***国产精品 | 欧美日韩在线视频一区二区 | 日韩精品在线视频免费观看 | 97成人在线观看 | 日韩av不卡在线观看 | 91探花在线 | 丝袜美腿亚洲 | 精品国产一区二区三区在线 | 亚洲欧美日韩国产一区二区 | 色a在线观看 | 久久九九久久精品 | 亚洲午夜av电影 | 亚洲一级片在线看 | 精品久久久久久久久久久院品网 | av在线影片 | 国产激情电影综合在线看 | 在线观看免费 | 日韩三级.com | 国产亚洲成人网 | 亚洲激情在线视频 | 久久国产精品第一页 | 日韩精品视频在线免费观看 | sesese图片| 国产又粗又猛又黄 | 亚洲第一区在线播放 | 欧美在一区 | 久久久久黄色 | 亚洲成人午夜在线 | 国产资源免费在线观看 | 国产一级特黄毛片在线毛片 | 国产成人亚洲在线观看 | 国产精品永久在线 | 亚洲欧美成人综合 | 国产精品一区二区视频 | 久久99国产一区二区三区 | 天天草av| 狠狠操电影网 | 亚洲婷婷伊人 | 超碰97.com| 婷婷色站| 亚洲精品综合在线观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产1区在线观看 | 国产精品美女久久久久久免费 | 又爽又黄又刺激的视频 | 日韩在线电影 | 国产成人三级在线 | 九九热精品国产 | 伊人中文在线 | 欧美日韩大片在线观看 | 天天干天天摸 | www国产亚洲精品久久网站 | 992tv在线观看网站 | 欧美视屏一区二区 | 又爽又黄又刺激的视频 | 91在线看片 | 婷婷丁香色 | 91麻豆精品一区二区三区 | 九色精品| 久久成人国产精品免费软件 | 国产午夜精品一区二区三区四区 | 日韩免费视频线观看 | 国产成人专区 | 麻豆传媒一区二区 | 亚洲国产精品女人久久久 | 天天插伊人 | 中文字幕在线观看一区 | 99精品毛片 | 久久99国产精品二区护士 | 91av手机在线观看 | 天天操导航 | 成人片在线播放 | 久久精品视频在线 | 午夜av免费看 | 国产视频欧美视频 | 91刺激视频| 久av电影 | 欧美日韩成人一区 | av在线免费观看不卡 | 欧美精品乱码久久久久 | 国产午夜精品免费一区二区三区视频 | 亚洲精品乱码久久久久久蜜桃91 | 丁香婷婷电影 | 一二三四精品 | 中文字幕中文字幕在线中文字幕三区 | 在线观看一二三区 | 久草在线免费资源站 | av成年人电影 | 久操视频在线观看 | 欧美精品免费一区二区 | 97天天综合网 | 日日夜夜婷婷 | 成人av观看 | 99久久久精品 | 9ⅰ精品久久久久久久久中文字幕 | 蜜臀91丨九色丨蝌蚪老版 | 五月天婷婷在线观看视频 | 中文字幕在线观看你懂的 | 色婷婷综合久久久中文字幕 | 日韩理论在线视频 | 黄污视频网站 | 久久伊99综合婷婷久久伊 | 久久久久夜色 | 91亚洲精品久久久久图片蜜桃 | 91插插插免费视频 | 天天综合网天天 | 成人亚洲综合 | 天天操夜操视频 | 国产精成人品免费观看 | 天天爽夜夜爽人人爽一区二区 | 成人久久久久久久久久 | 久久精品男人的天堂 | 婷婷国产一区二区三区 | 亚洲精品久久久久中文字幕二区 | a视频免费看 | 深夜免费小视频 | 伊在线视频 | 日韩免费电影网 | 久久精品国产亚洲 | 亚洲aⅴ在线 | 69亚洲视频 | 日韩免费在线网站 | 亚洲激情久久 | 韩日精品在线 | 成人一级黄色片 | 亚洲精品国偷拍自产在线观看 | 日韩在线一区二区免费 | 五月花丁香婷婷 | 日韩欧美高清一区二区三区 | 午夜黄色大片 | 丁香综合网 | 欧美成人xxxxx | 黄色毛片在线 | 成人免费共享视频 | 国产婷婷| 亚洲毛片在线观看. | 久久短视频 | av资源免费看 | 草久在线观看视频 | 人人涩 | www.狠狠操.com | 日本中文字幕网 | 啪啪凸凸| 国产精品网址在线观看 | 欧美aⅴ在线观看 | 日韩电影中文,亚洲精品乱码 | 九九热只有精品 | 国产三级视频 | 香蕉视频亚洲 | 亚洲精品伦理在线 | 亚洲在线成人精品 | 五月导航 | 操综合 | 激情综合五月天 | 日韩和的一区二在线 | 国产精品一区二区美女视频免费看 | 看毛片网站 | 久久精品欧美 | 91精品国产综合久久久久久久 | 最近能播放的中文字幕 | 在线观看国产麻豆 | 久久精品久久99 | 国产成人综合图片 | 亚洲精品国产成人av在线 | 欧美激情va永久在线播放 | 五月天久久综合 | 日本精品久久久久中文字幕 | 就要干b | 婷婷丁香综合 | 亚洲激情一区二区三区 | 日本在线观看中文字幕无线观看 | 久久久久久亚洲精品 | 成人黄色av网站 | 免费日韩av片 | av导航福利| 国产亚洲一区 | 国产精品美女久久久久aⅴ 干干夜夜 | 国内视频在线观看 | 欧美91精品| 国产视频在线看 | www免费黄色 | 91人人揉日日捏人人看 | 国产精品国产三级国产aⅴ入口 | 91在线网站 | 欧美另类网站 | 国产最新在线观看 | 国产成人三级三级三级97 | 不卡的一区二区三区 | 99热这里| 黄色片视频在线观看 | 精选久久| 久久成人午夜视频 | 国产精品久久久久久妇 | 国产精品1000 | 免费在线成人av | 在线免费av播放 | 日韩黄色大片在线观看 | 日本在线成人 | 国产欧美日韩视频 | 日韩一区二区免费在线观看 | 日本在线成人 | 欧美精品一区在线发布 | 中文字幕高清av | 国产伦理精品一区二区 | 日日操天天操夜夜操 | 中文在线免费视频 | 欧美极度另类 | 亚洲情感电影大片 | 久久欧美视频 | 综合色中色 | 欧美在线aa | 美国三级黄色大片 | 波多野结衣理论片 | 久久久午夜精品福利内容 | 青春草视频在线播放 | 久久在线免费视频 | 天天爽网站 | 99精品免费视频 | 久久免费99 | 999久久国产 | 亚洲国产精品99久久久久久久久 | 久久国产亚洲视频 | 国内久久看 | 973理论片235影院9 | 成人毛片一区二区三区 | 69av视频在线观看 | 成人h在线播放 | 一区二区三区四区免费视频 | 久久久人人爽 | 久久中文网 | 欧美男同网站 | 狠狠狠色丁香婷婷综合激情 | 91免费在线 | 欧美另类人妖 | 欧美亚洲久久 | 在线精品视频免费播放 | 国产剧情久久 | 国产91国语对白在线 | 亚洲一区二区三区在线看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 欧美综合久久 | 91成人蝌蚪 | 午夜视频色| 9色在线视频 | 欧洲亚洲精品 |