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 上海。

浙公网安备 33010602011771号