C#图片中画中国风图案

今天我要用C#语言画一个图案,具有中国风的图案。并镶在图片四周。

效果如下图所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

单个样式如上图所示

我们先建立一个应用程序。

命名TestChinaStyle

拖几个控件。

在Form_Loding事件中加入这样的代码。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 
 11 namespace TestChinaStyle
 12 {
 13     public partial class Form1 : Form
 14     {
 15         public Form1()
 16         {
 17             InitializeComponent();
 18         }
 19         private Bitmap GetSn() {
 20             Bitmap bt = new Bitmap(110,110);
 21             Graphics g = Graphics.FromImage(bt);
 22             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
 23             Pen MyPen1 = new Pen(Color.Black, 4);
 24             g.DrawLine(MyPen, 10, 10, 10,60);
 25             g.DrawLine(MyPen, 8, 62, 30, 62);
 26             g.DrawLine(MyPen, 28, 60, 28, 98);
 27             g.DrawLine(MyPen, 26, 98, 38, 98);
 28             g.DrawLine(MyPen, 38, 100, 38, 87);
 29             g.DrawLine(MyPen, 40, 87, 10, 87);
 30             g.DrawLine(MyPen, 10, 85, 10, 99);
 31             g.DrawLine(MyPen, 8, 98, 23, 98);
 32             g.DrawLine(MyPen, 21, 99, 21, 68);
 33             g.DrawLine(MyPen, 21, 70, 8, 70);
 34             g.DrawLine(MyPen, 10, 70, 10, 82);
 35             g.DrawLine(MyPen, 8, 80, 48, 80);
 36             g.DrawLine(MyPen, 46, 80, 46, 100);
 37             g.DrawLine(MyPen, 46, 98, 96, 98);
 38             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
 39             g.DrawLine(MyPen2,16,36,16,56);
 40             g.DrawLine(MyPen2, 15, 56, 34, 56);
 41             g.DrawLine(MyPen2, 34, 55, 34, 75);
 42             g.DrawLine(MyPen2, 33, 75, 53, 75);
 43             g.DrawLine(MyPen2, 52, 75, 52, 92);
 44             g.DrawLine(MyPen2, 51, 92, 70, 92);
 45             g.Dispose();
 46             return bt;
 47         }
 48 
 49 
 50         private Bitmap GetChinaStyleTopLeft()
 51         {
 52             Bitmap bt = new Bitmap(110, 110);
 53             Graphics g = Graphics.FromImage(bt);
 54             int angle = -270;
 55             g.TranslateTransform(110, 0);
 56             g.RotateTransform(angle);
 57             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
 58             Pen MyPen1 = new Pen(Color.Black, 4);
 59             g.DrawLine(MyPen, 10, 10, 10, 60);
 60             g.DrawLine(MyPen, 8, 62, 30, 62);
 61             g.DrawLine(MyPen, 28, 60, 28, 98);
 62             g.DrawLine(MyPen, 26, 98, 38, 98);
 63             g.DrawLine(MyPen, 38, 100, 38, 87);
 64             g.DrawLine(MyPen, 40, 87, 10, 87);
 65             g.DrawLine(MyPen, 10, 85, 10, 99);
 66             g.DrawLine(MyPen, 8, 98, 23, 98);
 67             g.DrawLine(MyPen, 21, 99, 21, 68);
 68             g.DrawLine(MyPen, 21, 70, 8, 70);
 69             g.DrawLine(MyPen, 10, 70, 10, 82);
 70             g.DrawLine(MyPen, 8, 80, 48, 80);
 71             g.DrawLine(MyPen, 46, 80, 46, 100);
 72             g.DrawLine(MyPen, 46, 98, 96, 98);
 73             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
 74             g.DrawLine(MyPen2, 16, 36, 16, 56);
 75             g.DrawLine(MyPen2, 15, 56, 34, 56);
 76             g.DrawLine(MyPen2, 34, 55, 34, 75);
 77             g.DrawLine(MyPen2, 33, 75, 53, 75);
 78             g.DrawLine(MyPen2, 52, 75, 52, 92);
 79             g.DrawLine(MyPen2, 51, 92, 70, 92);
 80             g.Dispose();
 81             return bt;
 82         }
 83 
 84 
 85         private Bitmap GetChinaStyleTopRight()
 86         {
 87             Bitmap bt = new Bitmap(110, 110);
 88             Graphics g = Graphics.FromImage(bt);
 89             int angle = -180;
 90             g.TranslateTransform(110, 110);
 91             g.RotateTransform(angle);
 92             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
 93             Pen MyPen1 = new Pen(Color.Black, 4);
 94             g.DrawLine(MyPen, 10, 10, 10, 60);
 95             g.DrawLine(MyPen, 8, 62, 30, 62);
 96             g.DrawLine(MyPen, 28, 60, 28, 98);
 97             g.DrawLine(MyPen, 26, 98, 38, 98);
 98             g.DrawLine(MyPen, 38, 100, 38, 87);
 99             g.DrawLine(MyPen, 40, 87, 10, 87);
100             g.DrawLine(MyPen, 10, 85, 10, 99);
101             g.DrawLine(MyPen, 8, 98, 23, 98);
102             g.DrawLine(MyPen, 21, 99, 21, 68);
103             g.DrawLine(MyPen, 21, 70, 8, 70);
104             g.DrawLine(MyPen, 10, 70, 10, 82);
105             g.DrawLine(MyPen, 8, 80, 48, 80);
106             g.DrawLine(MyPen, 46, 80, 46, 100);
107             g.DrawLine(MyPen, 46, 98, 96, 98);
108             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
109             g.DrawLine(MyPen2, 16, 36, 16, 56);
110             g.DrawLine(MyPen2, 15, 56, 34, 56);
111             g.DrawLine(MyPen2, 34, 55, 34, 75);
112             g.DrawLine(MyPen2, 33, 75, 53, 75);
113             g.DrawLine(MyPen2, 52, 75, 52, 92);
114             g.DrawLine(MyPen2, 51, 92, 70, 92);
115             g.Dispose();
116             return bt;
117         }
118 
119         private Bitmap GetChinaStyleBottomRight()
120         {
121             Bitmap bt = new Bitmap(110, 110);
122             Graphics g = Graphics.FromImage(bt);
123             int angle = -90;
124             g.TranslateTransform(0, 110);
125             g.RotateTransform(angle);
126             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
127             Pen MyPen1 = new Pen(Color.Black, 4);
128             g.DrawLine(MyPen, 10, 10, 10, 60);
129             g.DrawLine(MyPen, 8, 62, 30, 62);
130             g.DrawLine(MyPen, 28, 60, 28, 98);
131             g.DrawLine(MyPen, 26, 98, 38, 98);
132             g.DrawLine(MyPen, 38, 100, 38, 87);
133             g.DrawLine(MyPen, 40, 87, 10, 87);
134             g.DrawLine(MyPen, 10, 85, 10, 99);
135             g.DrawLine(MyPen, 8, 98, 23, 98);
136             g.DrawLine(MyPen, 21, 99, 21, 68);
137             g.DrawLine(MyPen, 21, 70, 8, 70);
138             g.DrawLine(MyPen, 10, 70, 10, 82);
139             g.DrawLine(MyPen, 8, 80, 48, 80);
140             g.DrawLine(MyPen, 46, 80, 46, 100);
141             g.DrawLine(MyPen, 46, 98, 96, 98);
142             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
143             g.DrawLine(MyPen2, 16, 36, 16, 56);
144             g.DrawLine(MyPen2, 15, 56, 34, 56);
145             g.DrawLine(MyPen2, 34, 55, 34, 75);
146             g.DrawLine(MyPen2, 33, 75, 53, 75);
147             g.DrawLine(MyPen2, 52, 75, 52, 92);
148             g.DrawLine(MyPen2, 51, 92, 70, 92);
149             g.Dispose();
150             return bt;
151         }
152         private void Form1_Load(object sender, EventArgs e)
153         {
154             pictureBox1.Image = GetSn();
155         }
156     }
157 }

运行就得到第二张图片的效果,

通过旋转的基点和旋转的角度就可以得到相应的另外三个角的图案。

在通过DrawImage方法将图片画在截图之中。

直接上关键性的代码

其他的略过。

  1         private Bitmap GetChinaStyleNormal()
  2         {
  3             Bitmap bt = new Bitmap(110, 110);
  4             Graphics g = Graphics.FromImage(bt);
  5             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
  6             Pen MyPen1 = new Pen(Color.Black, 4);
  7             g.DrawLine(MyPen, 10, 10, 10, 60);
  8             g.DrawLine(MyPen, 8, 62, 30, 62);
  9             g.DrawLine(MyPen, 28, 60, 28, 98);
 10             g.DrawLine(MyPen, 26, 98, 38, 98);
 11             g.DrawLine(MyPen, 38, 100, 38, 87);
 12             g.DrawLine(MyPen, 40, 87, 10, 87);
 13             g.DrawLine(MyPen, 10, 85, 10, 99);
 14             g.DrawLine(MyPen, 8, 98, 23, 98);
 15             g.DrawLine(MyPen, 21, 99, 21, 68);
 16             g.DrawLine(MyPen, 21, 70, 8, 70);
 17             g.DrawLine(MyPen, 10, 70, 10, 82);
 18             g.DrawLine(MyPen, 8, 80, 48, 80);
 19             g.DrawLine(MyPen, 46, 80, 46, 100);
 20             g.DrawLine(MyPen, 46, 98, 96, 98);
 21             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
 22             g.DrawLine(MyPen2, 16, 36, 16, 56);
 23             g.DrawLine(MyPen2, 15, 56, 34, 56);
 24             g.DrawLine(MyPen2, 34, 55, 34, 75);
 25             g.DrawLine(MyPen2, 33, 75, 53, 75);
 26             g.DrawLine(MyPen2, 52, 75, 52, 92);
 27             g.DrawLine(MyPen2, 51, 92, 70, 92);
 28             g.Dispose();
 29             return bt;
 30         }
 31 
 32 
 33         private Bitmap GetChinaStyleRandAngle(int angle, int X, int Y)
 34         {
 35             Bitmap bt = new Bitmap(110, 110);
 36             Graphics g = Graphics.FromImage(bt);
 37             g.TranslateTransform(X, Y);
 38             g.RotateTransform(angle);
 39             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
 40             Pen MyPen1 = new Pen(Color.Black, 4);
 41             g.DrawLine(MyPen, 10, 10, 10, 60);
 42             g.DrawLine(MyPen, 8, 62, 30, 62);
 43             g.DrawLine(MyPen, 28, 60, 28, 98);
 44             g.DrawLine(MyPen, 26, 98, 38, 98);
 45             g.DrawLine(MyPen, 38, 100, 38, 87);
 46             g.DrawLine(MyPen, 40, 87, 10, 87);
 47             g.DrawLine(MyPen, 10, 85, 10, 99);
 48             g.DrawLine(MyPen, 8, 98, 23, 98);
 49             g.DrawLine(MyPen, 21, 99, 21, 68);
 50             g.DrawLine(MyPen, 21, 70, 8, 70);
 51             g.DrawLine(MyPen, 10, 70, 10, 82);
 52             g.DrawLine(MyPen, 8, 80, 48, 80);
 53             g.DrawLine(MyPen, 46, 80, 46, 100);
 54             g.DrawLine(MyPen, 46, 98, 96, 98);
 55             Pen MyPen2 = new Pen(Color.FromArgb(203, 28, 43), 2);
 56             g.DrawLine(MyPen2, 16, 36, 16, 56);
 57             g.DrawLine(MyPen2, 15, 56, 34, 56);
 58             g.DrawLine(MyPen2, 34, 55, 34, 75);
 59             g.DrawLine(MyPen2, 33, 75, 53, 75);
 60             g.DrawLine(MyPen2, 52, 75, 52, 92);
 61             g.DrawLine(MyPen2, 51, 92, 70, 92);
 62             g.Dispose();
 63             return bt;
 64         }
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76         /// <summary>
 77         /// 通用截图API方法的的封装
 78         /// </summary>
 79         /// <param name="snnumber">sn</param>
 80         /// <param name="lineStr">线别</param>
 81         private void SaveImageAndDelety(string snnumber, string lineStr,string machineStr)
 82         {
 83             string txtboxDelay = this.txtboxDelay.Text.Trim();
 84             int txtboxDelayint = int.Parse(txtboxDelay);
 85             //获得当前屏幕的分辨率            
 86             Screen scr = Screen.PrimaryScreen;
 87             Rectangle rc = scr.Bounds;
 88             int iWidth = rc.Width;
 89             int iHeight = rc.Height;
 90             //创建一个和屏幕一样大的Bitmap            
 91             Image myImage = new Bitmap(iWidth-100, iHeight-105);
 92             //从一个继承自Image类的对象中创建Graphics对象            
 93             Graphics g = Graphics.FromImage(myImage);
 94             //抓屏并拷贝到myimage里            
 95             this.Hide();
 96             Thread.Sleep(txtboxDelayint);
 97             g.CopyFromScreen(new Point(100, 40), new Point(0, 0), new Size(iWidth-100, iHeight-105));
 98             this.Show();
 99             //水印内容
100            // string waterText = "Designed By 5DX Team " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
101            // Font font = new Font("宋体", 25);
102             //Font font1 = new Font("宋体", 18);
103           //  Font font2 = new Font("新宋体", 14);
104             //用于确定水印的大小
105           //  SizeF zisizeF = new SizeF();
106           //  zisizeF = g.MeasureString(waterText, font);
107             //亮度,红色,绿色,蓝色
108            // SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 76, 255, 43));
109            // SolidBrush solidBrush2 = new SolidBrush(Color.FromArgb(255, 255, 0, 0));
110           //  g.TranslateTransform(0, iHeight);
111             //以原点为中心 转 -45度
112             //g.RotateTransform(-45);
113             //水印
114            // g.DrawString(waterText, font2, solidBrush, new PointF(iWidth / 2 + 180, iHeight / 2 + 300));
115             //g.RotateTransform(45);
116             //左下角
117             g.DrawImage(GetChinaStyleNormal(), -8, 875);
118             //    GetChinaStyleTopLeft()
119             //                int angle = -270;
120             //              g.TranslateTransform(110, 0);
121             //        GetChinaStyleTopRight()
122             //                int angle = -180;
123             //              g.TranslateTransform(110, 110);
124             //GetChinaStyleBottomRight()
125             //              int angle = -90;
126             //g.TranslateTransform(0, 110);
127             // 左上角
128             g.DrawImage(GetChinaStyleRandAngle(-270, 110, 0), -10, -8);
129             //右上角
130             g.DrawImage(GetChinaStyleRandAngle(-180, 110, 110), 1717, -10);
131             //右下角
132             g.DrawImage(GetChinaStyleRandAngle(-90, 0, 110), 1719, 873);
133             //画四条粗红线
134             Pen MyPen = new Pen(Color.FromArgb(203, 28, 43), 4);
135             g.DrawLine(MyPen, 2, 84, 2, 885);   //左边竖线
136             g.DrawLine(MyPen, 1817, 40, 1817, 890);   //右边竖线
137             g.DrawLine(MyPen, 88, 2, 1735, 2);   //上边横线
138             g.DrawLine(MyPen, 88, 973, 1735, 973);   //下边横线
139             TestOnSeal _top = new TestOnSeal();
140             _top.TextFont = new Font("黑体", 16, FontStyle.Bold);
141             _top.FillColor = Color.Red;
142             //_top.ColorTOP = Color.Black;
143             _top.Text = "xxx";
144             _top.BaseString = "xx专用";
145             _top.ShowPath = true;
146             _top.LetterSpace = 1;
147             _top.SealSize = 180;
148             _top.CharDirection = Char_Direction.Center;
149             _top.SetIndent(20);
150             g.DrawImage(_top.TextOnPathBitmap(), 1600, 780);
151             _top.SetIndent(20);
152             //   g.DrawImage(_top.TextOnPathBitmap(), 180, 180);
153             //  pictureBox1.Image = _top.TextOnPathBitmap();
154             g.Dispose();
155             string parentPath = this.txtBoxPath.Text.Trim();
156             string timefolder = DateTime.Now.ToString("mmddss");
157             string timefolder2 = DateTime.Now.ToString("MMdd");
158             DateTime dt = DateTime.Now;
159             string dateStr1 = "20:00:00";
160             string dateStr2 = dt.ToString("HH:mm:ss");
161             DateTime t1 = Convert.ToDateTime(dateStr1);
162             DateTime t2 = Convert.ToDateTime(dateStr2);
163             int compNum = DateTime.Compare(t1, t2);
164             if (compNum > 0)
165             {
166                 //继续创建当天的文件夹,并且往里面加上图片
167                 string saveRealPath = parentPath + "\\" + lineStr + "\\" + timefolder2 + "\\" + snnumber.ToUpper() + "__" + machineStr + "__" + timefolder + ".jpg";
168                 string filepaht = parentPath + "\\" + lineStr + "\\" + timefolder2;
169                 if (!Directory.Exists(filepaht))
170                 {
171                     Directory.CreateDirectory(filepaht);
172                 }
173                 myImage.Save(saveRealPath);
174                 string filepath = filepaht + "\\" + "Content.txt";
175                 if (!File.Exists(filepath))
176                 {
177                     TextWriter tw = new StreamWriter(filepath);
178                     tw.WriteLine(snnumber.Trim().ToUpper());
179                     tw.Close();
180                 }
181                 else
182                 {
183                     TextWriter tw = new StreamWriter(filepath, true);
184                     tw.WriteLine(snnumber.Trim().ToUpper());
185                     tw.Close();
186                 }
187                 
188             
189             }
190             if (compNum < 0)
191             {
192                 //创建第二天的文件夹,并且往里面加上图片
193                 string tommorm = DateTime.Now.AddDays(+1).ToString("MMdd");
194                 string saveRealPath = parentPath + "\\" + lineStr + "\\" + tommorm + "\\" + snnumber.ToUpper() + "__" + machineStr + "__" + timefolder + ".jpg";
195                 string filepaht = parentPath + "\\" + lineStr + "\\" + tommorm;
196                 if (!Directory.Exists(filepaht))
197                 {
198                     Directory.CreateDirectory(filepaht);
199                 }
200                 myImage.Save(saveRealPath);
201                 string filepath = filepaht + "\\" + "Content.txt";
202                 if (!File.Exists(filepath))
203                 {
204                     TextWriter tw = new StreamWriter(filepath);
205                     tw.WriteLine(snnumber.Trim().ToUpper());
206                     tw.Close();
207                 }
208                 else
209                 {
210                     TextWriter tw = new StreamWriter(filepath, true);
211                     tw.WriteLine(snnumber.Trim().ToUpper());
212                     tw.Close();
213                 }
214                 
215               
216             }
217         }

 

下一篇博客我将讲解图片加入公章的方法,使得图片更加高逼格的效果。

2020.12.12 上海。

 

posted @ 2020-12-12 12:38  johnson--save  阅读(121)  评论(0)    收藏  举报