WinForm(十二)畫圖

在.NET中,畫圖主要是通過Graphics類實現的,這個類主要通過兩類方法完成畫圖,一類是DrawXXX,畫各種線條圖形;另一類是FillXXX,用各種形狀,填充各種圖形。Graphics是畫板,Draw各個方法是各種盞筆(不過在調用Draw方法時,參數需要一個Pen對象),Fill的各個方法就是種種刷子(確實Fill的方法參數也需要一個Brush對象)。首先要熟悉各個Draw和Fill方法,以及他們的參數,那么剩下的事就是對坐票了,畫什么,在那里畫,怎么用Draw和Fill了。

下面是在Form上畫了一個小票,然后調用打印組件在虛擬打印機里打印出來的效果。

using QRCoder;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;namespace WinFormsDemo12
{public partial class Form1 : Form{public Form1(){InitializeComponent();}void Draw(Graphics graphics){var y = 15;using var logo = new Bitmap(Directory.GetCurrentDirectory() + "/aeon.png");graphics.DrawImage(MakeGrayscale(logo), 60, y, 200, 80);graphics.DrawLine(new Pen(Color.Black, 2), 10, y += 80, 310, y);graphics.DrawLine(new Pen(Color.Black, 2), 10, y += 4, 310, y);var font = new Font("黑體", 10);var brush = new SolidBrush(Color.Black);graphics.DrawString("分店:012", font, brush, 10, y += 1);graphics.DrawString("店員:張三", font, brush, 160, y);graphics.DrawString($"時間:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}", font, brush, 10, y += 20);var no = "000000000001";graphics.DrawString($"流水號:{no}", font, brush, 10, y += 20);graphics.DrawLine(new Pen(Color.Black, 2), 10, y += 25, 310, y);graphics.DrawString("名稱       數量  單價  金額", font, brush, 10, y += 5);graphics.DrawString("西紅柿     500g  26.00 15.00", font, brush, 10, y += 20);graphics.DrawString("西葫蘆    1000g  23.00 23.00", font, brush, 10, y += 20);graphics.DrawString("茄子       500g  50.00 25.00", font, brush, 10, y += 20);graphics.DrawString("豆角       500g  38.00 19.00", font, brush, 10, y += 20);graphics.DrawLine(new Pen(Color.Black, 2), 10, y += 20, 310, y);graphics.DrawLine(new Pen(Color.Black, 2), 10, y += 4, 310, y);var sumfont = new Font("黑體", 12);graphics.DrawString("              小計:82", sumfont, brush, 10, y += 5);var qrCodeAsBitmapByteArr = PngByteQRCodeHelper.GetQRCode(no, QRCodeGenerator.ECCLevel.Q, 20, false);using var qrcode = Image.FromStream(new MemoryStream(qrCodeAsBitmapByteArr));graphics.DrawImage(qrcode, 100, y += 50, 120, 120);}public static Bitmap MakeGrayscale(Bitmap original){var newBitmap = new Bitmap(original.Width, original.Height);var g = Graphics.FromImage(newBitmap);var colorMatrix = new System.Drawing.Imaging.ColorMatrix(new float[][]{new float[] {.3f, .3f, .3f, 0, 0},new float[] {.59f, .59f, .59f, 0, 0},new float[] {.11f, .11f, .11f, 0, 0},new float[] {0, 0, 0, 1, 0},new float[] {0, 0, 0, 0, 1}});var attributes = new System.Drawing.Imaging.ImageAttributes();attributes.SetColorMatrix(colorMatrix);g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);g.Dispose();return newBitmap;}???private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){if (e.Graphics != null){Draw(e.Graphics);}}private void button2_Click(object sender, EventArgs e){printDocument1.Print();}private void button1_Click(object sender, EventArgs e){var graphics = this.CreateGraphics();Draw(graphics);}}
}

MakeGrayscale方法是把彩色logo轉黑白的一個算法,關注畫圖部分請忽略。

Graphics實現了IDisposable,用后請釋放。

窗體的瀏覽效果:

38403f84f6a3cb85b001111ca9b61b14.png

虛擬打印機輸出的PDF效果圖:

e2432f3756beb71591c384a53af6bae5.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從4個方面簡單介紹SaaS

你了解什么是SaaS嗎?SaaS有什么優勢?選擇SaaS平臺要注意哪些要素?在這里,怡海軟件將針對這些問題進行簡單介紹: 什么是SaaS?SaaS是Software-as-a-Service(軟件即服務)的簡稱&#xf…

騰訊的一筆畫游戲--巧妙解法

根據這個圖形我們可以發現圖中的規律。 所有數據的和 所有邊長的和-最后一個形狀的一個邊-除最后一個邊之外所有邊的一半。 知道了這個規律后我們就很容易去實現代碼了: 這里的解決關鍵點為——“余弦定理”,因為角度我們可以用(n-2&#xf…

Map value類型不同的寫法

Map value類型不同的寫法 Map<String, Object> accountMapnew HashMap<String, Object>(); int userId data.get("userId").getAsInt(); int accType data.get("accType").getAsInt();String name data.get("accType").getAsStr…

mysql中局部變量說法正確的是_mysql全局變量和局部變量

全局變量和局部變量在服務器啟動時&#xff0c;會將每個全局變量初始化為其默認值(可以通過命令行或選項文件中指定的選項更改這些默認值)。然后服務器還為每個連接的客戶端維護一組會話變量&#xff0c;客戶端的會話變量在連接時使用相應全局變量的當前值初始化。舉一個例子&a…

Web應用架構-Full-text Search Service

Elasticsearch轉載于:https://www.cnblogs.com/zhitianji/p/9728016.html

終于找到你!如何將前端console.log的日志保存成文件?

本篇文章來自一個需求&#xff0c;前端websocket會收到各種消息&#xff0c;但是調試的時候&#xff0c;我希望把websoekt推送過來的消息都保存到一個文件里&#xff0c;如果出問題的時候&#xff0c;我可以把這些消息的日志文件提交給后端開發區分析錯誤。但是在瀏覽器里&…

基于 .NET 6 開發的開源遠程終端工具

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;有用的工具&#xff0c;不要忘記關注。今天介紹一個非常實用的工具 mRemoteNG&#xff0c;這是一個基于 .NET 6 開發的遠程終端軟件&#xff0c;開源免費&#xff0c;不用擔心版權和軟件費用…

mysql 行列轉換 動態_mysql 行列動態轉換的實現(列聯表,交叉表)

(1)動態&#xff0c;適用于列不確定情況create table table_name(id int primary key,col1 char(2),col2 char(2),col3 int);insert into table_name values(1 ,A1,B1,9),(2 ,A2,B1,7),(3 ,A3,B1,4),(4 ,A4,B1,2),(5 ,A1,B2,2),(6 ,A2,B2,9),(7 ,A3,B2,8),(8 ,A4,B2,5),(9 ,A1,…

第六次作業—例行報告

本周PSP 進度條 代碼累計折線圖 博文累計折線圖 本周餅狀圖 轉載于:https://www.cnblogs.com/zej87/p/7738895.html

Tomcat7/8開啟WebDAV的支持

WebDAV是一種超文本傳輸協議&#xff0c;Tomcat默認是支持WebDAV的&#xff0c;且默認為禁用狀態。 更多詳細信息&#xff0c;請參考&#xff1a; https://zh.wikipedia.org/wiki/WebDAV http://www.webdav.org/ 開啟步驟如下&#xff1a; 1、在Tomcat的webapps目錄下新建webda…

算法復雜度分析(下)

前一篇文章算法復雜度分析&#xff08;上&#xff09;講述了復雜度的大 O 表示法和幾個分析原則&#xff0c;這篇文章我們來講講另外幾種復雜度&#xff0c;最好情況時間復雜度&#xff08;best case time complexity&#xff09;、最壞情況時間復雜度&#xff08;worst case t…

免費分享一些.NET Core比較優秀的社區資料和微軟官方資料

這次小編所分享的這套筆記手冊&#xff0c;主要是分享一些.NET Core比較優秀的社區資料和微軟官方資料。已經把所有的重要知識點進行了完整的歸類和整理&#xff0c;可以讓大家更清晰和快速的學習.NET Core&#xff0c;不浪費任何多余的時間&#xff01;全網首發&#xff01;相…

python異或運算怎么算_小強學Python+OpenCV之-1.4.4掩膜mask及位運算(與、或、非、異或)...

問題引入在小強學PythonOpenCV之&#xff0d;1.4.2裁剪一節&#xff0c;我們使用的是numpy數組切片功能實現圖片區域的裁剪。那么&#xff0c;如果我們想要裁剪圖像中任意形狀的區域時&#xff0c;應該怎么辦呢&#xff1f;答案是&#xff0c;使用掩膜(masking)。但是這一節我們…

51 Nod 1670 打怪獸

1670 打怪獸lyk在玩一個叫做“打怪獸”的游戲。游戲的規則是這樣的。lyk一開始會有一個初始的能量值。每次遇到一個怪獸&#xff0c;若lyk的能量值>怪獸的能量值&#xff0c;那么怪獸將會被打敗&#xff0c;lyk的能量值增加1&#xff0c;否則lyk死亡&#xff0c;游戲結束。若…

QQ協議調試器 QQDebugger

QQ協議老變&#xff0c;為了分析協議&#xff0c;單用抓包工具還是不夠的&#xff0c;還是得需要很好的調試工具。在網上找了幾個調試工具&#xff0c;易用性均欠佳&#xff0c;不得已自己開發了一個 QQDebugger&#xff0c;不敢專美&#xff0c;特意發布出來。QQDebugger 在功…

PostgreSQL 10.1 手冊_部分 II. SQL 語言_第 5 章 數據定義_5.5. 修改表

5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加約束5.5.4. 移除約束5.5.5. 更改列的默認值5.5.6. 修改列的數據類型5.5.7. 重命名列5.5.8. 重命名表當我們已經創建了一個表并意識到犯了一個錯誤或者應用需求發生改變時&#xff0c;我們可以移除表并重新創建它。但如果表中…

Uptime-Kuma 一個輕量的開源監控工具

點擊藍字 關注我們你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;有用的工具&#xff0c;不要忘記關注。今天給大家介紹一個開源的監控工具 Uptime Kuma, 主要用來監控 Web 以及網絡, 和 Prometheus 相比, 它是輕量的, Uptime Kuma 是基于…

怎么查看mysql正在運行的語句_MySQL如何查詢當前正在運行的SQL語句

通過status命令&#xff0c;查看Slow queries這一項&#xff0c;如果值長時間>0,說明有查詢執行時間過長以下為引用的內容&#xff1a;mysql> status;--------------mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)Connection id: 53Current database: (n…

SpringBoot實戰之SpringBoot自動配置原理

SpringBoot 自動配置主要通過 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等幾個注解來進行自動配置完成的。EnableAutoConfiguration 開啟自動配置&#xff0c;主要作用就是調用 Spring-Core 包里的 loadFactoryName…

Install OpenCV-Python in Ubuntu

之前安裝python版opencv&#xff0c;需要下載whl文件&#xff0c;進行安裝&#xff0c;這是在window環境下的&#xff1a;安裝opencv_python,下載whl包安裝系統python下的opencv 今天發現一個簡單的方法。Install OpenCV-Python in UbuntuInstall package python-opencv with f…