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

来源:http://www.cnblogs.com/Aries-rong/archive/2016/11/14/6062434.html
-Advertisement-
Play Games

上個月免費幫別人做事,就一直在服務員和程式員中來回切換,所以好多事情都弄得亂糟糟的,家裡也是亂七八糟的,所以學習這一塊也放了一段時間。 剛剛開始當服務員的時間看到了形形色色的人,覺得很好玩,他們每個人像代碼又不像,有的很簡單,有的很美觀,有的很複雜,有的還很神奇,可是他們確可以來回切換,很簡單的能瞬 ...


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

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

第一天去做事的時候,別人來了,我整個人都是懵的,完全不知道乾什麼,該做什麼,該怎麼說,大眾會喜歡什麼,不喜歡什麼,如果遇到別人不高興了,應該化解,所有的一切都是一片空白,整個人真的和傻子沒什麼區別.....( ╯□╰ )......大腦程式完全死機,但重啟不了。

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

 

以後若是有空想起,再寫寫她們的模樣吧,這也算每一天遇見的不同的風景的。

 

 

閑話說了很多,回到正題,最近開始學習圖像處理這一塊了,學一點就記錄一點,等寫完也出了一個小軟體了~

這裡的是:繪製公章。

  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   

效果預覽圖:

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一步:入口文件增加 第二步:修改config文件,我這裡路由模式設置為2 效果展示: ...
  • gvim的菜單亂碼解決方法: (亂碼是由於系統內碼不相容導致,系統內碼包括gb2312 gb18030 utf-8 utf-16[unicode]等) 生成文件 ~/.gvimrc 並添加如下語句:set encoding=chineseset langmenu=zh_CN.GBKset imcmd... ...
  • 第一次寫技術博客,還有些興奮呢。我是CrazyCatJack,大家可以叫我CCJ或者瘋貓。我即將成為一名嵌入式Linux的驅動工程師,現在還是一枚大四狗,呼呼~大學期間做了一些項目和比賽,都是基於32位的MCU(例如STM32、Freescale K60),這些呢都是根據網上的視頻,PDF自學的。現 ...
  • 來自:http://sspai.com/27403/ Finder 是 Mac 電腦的系統程式,有的功能類似 Windows 的資源管理器。它是我們打開 Mac 首先見到的「笑臉」,有了它,我們可以組織和使用 Mac 里的幾乎所有東西,包括應用程式、文件、文件夾、磁碟以及你網路上的共用磁碟,你同時可 ...
  • ipcs 1. 命令格式 ipcs [resource-option] [output-format] ipcs [resource-option] -i id 2. 命令功能 提供IPC設備的信息 3. 使用方法 resource選項: ipcs -m 查看系統共用記憶體信息 ipcs -q 查看系 ...
  • 1.命令格式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 2. 命令功能 在文件目錄層級中查找文件並做相應的處理 3. 命令選項 -name finename 按照文件名查找文件,文件名可使用通配符 -per ...
  • 概述 ASP.NET Core 1.0是ASP.NET的一個重要的重新設計。 例如,在ASP.NET Core中,使用Middleware編寫請求管道。 ASP.NET Core中間件對HttpContext執行非同步邏輯,然後可選地調用序列中的下一個中間件或直接終止請求。 您通常通過在Configu... ...
  • 最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。 十年河東十年河西,莫欺少年窮 學無止境,精益求精 最近在做自學MVC,遇到的問題很多,索性一點點總結下。 MVC4數據驗證: 本例以程式為例就行說明: MVC特性,本篇主要講解:Exclude、Includ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...