C#學習筆記-圖像處理篇(一)繪製公章

上個月免費幫別人作事,就一直在服務員和程序員中來回切換,因此好多事情都弄得亂糟糟的,家裏也是亂七八糟的,因此學習這一塊也放了一段時間。程序員

剛剛開始當服務員的時間看到了形形色色的人,以爲很好玩,他們每一個人像代碼又不像,有的很簡單,有的很美觀,有的很複雜,有的還很神奇,但是他們確能夠來回切換,很簡單的能瞬間變複雜,很美觀的也能瞬間變得不堪。全部你覺得的,能瞬間翻天覆地。學習

第一天去作事的時候,別人來了,我整我的都是懵的,徹底不知道幹什麼,該作什麼,該怎麼說,大衆會喜歡什麼,不喜歡什麼,若是遇到別人不高興了,應該化解,全部的一切都是一片空白,整我的真的和傻子沒什麼區別.....( ╯□╰ )......大腦程序徹底死機,但重啓不了。字體

後面天天一點一點去學才稍微能開始說話的,幾個服務員姐姐教了我不少,她們有的實在,有的木訥,有的精明,有的聰慧,和代碼相處久了,忽然看到了活生生的,個性如此鮮明的人,就像忽然間打開了新世界的大門通常,一切都新奇耀眼。她們和讀書的時候碰見的各類同窗,老師,家長甚至如今的同事都不同,她們都有深入的社會印記,她們都有本身鮮明的個性,獨樹一幟!每一個人都像顆彩色的石頭通常,有的地方璀璨奪目,有的地方暗淡無光。this

 

之後如果有空想起,再寫寫她們的模樣吧,這也算每一天碰見的不一樣的風景的。spa

 

 

閒話說了不少,回到正題,最近開始學習圖像處理這一塊了,學一點就記錄一點,等寫完也出了一個小軟件了~code

這裏的是:繪製公章。orm

  1 #region 繪製公章
  2         private void simpleButton_繪製公章_Click(object sender, EventArgs e)
  3         {
  4             int tem_Line = 0;  //圓的直徑
  5             int circularity_W = 5; //畫筆的粗細
  6             string star_Str = "";  //星星
  7             Font star_Font = new Font("Arial", 30, FontStyle.Regular);//設置星號的字體樣式
  8 
  9             #region 畫圓
 10 
 11             if (panel_繪製公章.Height > panel_繪製公章.Width)  //若是panel控件的高度大於等於寬度
 12             {
 13                 tem_Line = panel_繪製公章.Width;  //設置寬度爲圓的直徑
 14             }
 15             else
 16             {
 17                 tem_Line = panel_繪製公章.Height;  //設置高度爲圓的直徑
 18             }
 19             //設置圓的繪製區域=>如今是正方形的區域
 20             rect = new Rectangle(circularity_W, circularity_W, tem_Line - 2 * circularity_W, tem_Line - 2 * circularity_W);
 21 
 22             //補充:Graphics必須有載體,也就是在哪裏繪
 23             //因此必須是this.CreateGraphics或者Panel..CreateGraphics等格式
 24             Graphics g = panel_繪製公章.CreateGraphics();//實例化Graphics類
 25             //消除繪製圖形的鋸齒
 26             g.SmoothingMode = SmoothingMode.AntiAlias;  //System.Drawing.Drawing2D;           
 27             g.Clear(Color.White);  //以白色清空panel1控件的背景,防止重複畫           
 28             Pen myPen = new Pen(Color.Red, circularity_W);  //設置畫筆(顏色和粗細)
 29             g.DrawEllipse(myPen, rect);  //繪製圓
 30 
 31             #endregion
 32 
 33             #region 畫星星
 34 
 35             SizeF Var_Size = new SizeF(rect.Width, rect.Height);  //實例化SizeF類
 36             Var_Size = g.MeasureString(star_Str, star_Font);  //對指定字符串進行測量
 37 
 38             //正中間的位置繪製星號
 39             float star_x = (rect.Width / 2F) + circularity_W - Var_Size.Width / 2F;
 40             float star_y = rect.Height / 2F - Var_Size.Width / 2F;
 41             g.DrawString(star_Str, star_Font, myPen.Brush, new PointF(star_x, star_y));
 42             
 43             #endregion
 44 
 45             #region 畫文字
 46 
 47             Var_Size = g.MeasureString("本人專用章", Var_Font);//對指定字符串進行測量
 48 
 49             //繪製文字:在中間,可是在星星下面
 50             float m = (rect.Width / 2F) + circularity_W - Var_Size.Width / 2F;
 51             float n = rect.Height / 2F + Var_Size.Height * 2;
 52             g.DrawString("本人專用章", Var_Font, myPen.Brush, new PointF(m, n));
 53 
 54             int len = 0;
 55             if (inputWords != null) //若是沒有輸入文字,加判斷
 56             {
 57                 len = inputWords.Length;//獲取字符串的長度
 58             }
 59 
 60             float angle = 180;//設置文字的初始旋轉角度
 61             
 62             float change = 0;
 63 
 64             if (len > 1) //一個字的須要特殊處理
 65             {
 66                 change = 180 / (len - 1);
 67             }
 68             for (int i = 0; i < len; i++)//將文字以指定的弧度進行繪製
 69             {
 70                 if (len > 1)
 71                 {
 72                     //至關於把座標系移動到了正中間
 73                     float x = (tem_Line + circularity_W / 2) / 2;
 74                     float y = (tem_Line + circularity_W / 2) / 2;
 75                     //將指定的平移添加到g的變換矩陣前         
 76                     g.TranslateTransform(x, y);
 77                     g.RotateTransform(angle);//將指定的旋轉用於g的變換矩陣   
 78                     Brush myBrush = Brushes.Red;//定義畫刷
 79 
 80                     //須要注意,這時文字的位置的座標位置是以新的座標系爲基礎獲得的
 81                     float words_x = tem_Line / 2 - 6 * circularity_W;
 82                     float words_y = 0;
 83                     g.DrawString(inputWords.Substring(i, 1), Var_Font, myBrush, words_x, words_y);//顯示旋轉文字
 84                     g.ResetTransform();//將g的全局變換矩陣重置爲單位矩陣=>對應TranslateTransform,至關於恢復操做
 85                     angle += change;//設置下一個文字的角度
 86 
 87                 }
 88                 else
 89                 {
 90                     //輸入的文字爲一個時候是特殊狀況,單獨考慮
 91                     float x = (tem_Line + circularity_W / 2) / 2;
 92                     float y = (tem_Line + circularity_W / 2) / 2;       
 93                     g.TranslateTransform(x, y);
 94                     g.RotateTransform(0);  
 95                     Brush myBrush = Brushes.Red;
 96                     float words_x = -circularity_W*3;
 97                     float words_y = -(tem_Line / 2 - 2 * circularity_W);
 98                     g.DrawString(inputWords.Substring(i, 1), Var_Font, myBrush, words_x, words_y);
 99                     g.ResetTransform();
100                 }
101                 
102             }
103 
104             #endregion
105 
106         }
107 
108         private void simpleButton2_Click(object sender, EventArgs e)
109         {
110             inputWords = textBox_文字.Text;
111             MessageBox.Show("保存成功!");
112         }
113 #endregion   

效果預覽圖:blog

 

相關文章
相關標籤/搜索