1. 程式人生 > >VS2017中GDI+繪圖輕鬆入門(3)

VS2017中GDI+繪圖輕鬆入門(3)

看過前兩篇GDI+繪圖入門博文的小夥伴可能會有提出新的需求,我們想把我們所繪製的圖形儲存起來,省得每次進到我們的程式中又要重新開始畫。對於這個需求,GDI+在設計的時候早就考慮進去了,所以它還有第三種繪圖方式,那就是通過一個圖片檔案繪圖。

當然,這個圖片檔案可以是你現場建立的,也可以是早就存在的一張圖片,能夠通過圖片來建立一個Graphic物件繪圖,一定是個很好的體驗,比如,我是一個攝影愛好者,我想給我的所有圖片加上水印,而我又會一點點C#程式設計,那麼我就可以利用下面我們說到的通過圖片來建立繪圖物件。

一、通過圖片建立繪圖物件
首先來看看如何通過一個圖片來建立繪圖物件,最簡單的程式碼如下:
1、從已有檔案建立繪圖物件

Bitmap myBitmap = new Bitmap(@"E:\Pictures\myPic.bmp");
Graphics g = Graphics.FromImage(myBitmap);

2、從新建立圖片物件建立繪圖物件

Bitmap image = new Bitmap(200, 200);
Graphics grphic = Graphics.FromImage(image);

二、可能遭遇的錯誤
這裡需要特別注意的是有以下情形之一會遭遇Bitmap“引數無效”或者image.FromFile“記憶體不足”的錯誤:
1、圖片路徑不正確
2、圖片為空檔案
3、圖片檔案破損
在這裡插入圖片描述


上述程式碼之所以出錯,就是因為filepath1中所指圖形檔案是剛建立,而且是空檔案。
在這裡插入圖片描述
上述程式碼之所以出錯,是因為所指檔案遭到了破壞。
這裡,我,沒有把三種出錯都一一截圖出來,但希望大家編寫程式碼時注意。

三、在記憶體上繪圖,顯示在PictureBox
我們這利用圖片來建立graphic物件,繪圖後顯示在Picture上(當然你也可以選擇顯示在form窗體上)程式碼如下:

 string filePath = @"e:\testPic.jpg";
            Bitmap myBitmap;
            if (File.Exists(filePath))
                myBitmap = new Bitmap(filePath);
            else
                myBitmap = new Bitmap(pictureBox1.Width,pictureBox1.Height);
           
           gp= Graphics.FromImage(myBitmap);
           drawGraphics(gp);
           myBitmap.Save(filePath);
           pictureBox1.Image = myBitmap;
void drawGraphics(Graphics grfc)
        {

            //定義了一個藍色,寬度為的畫筆
            Pen pen;
            pen = new Pen(Color.Green, 2);
            //在畫板上畫直線,起始座標為(pictureBox1.Width / 4, pictureBox1.Height/4),終點座標為(pictureBox1.Width*3 / 4, 		  pictureBox1.Height*3 / 4)
            grfc.DrawLine(pen, pictureBox1.Width / 4, pictureBox1.Height / 4, pictureBox1.Width * 3 / 4, pictureBox1.Height * 3 / 4);
            //在畫板上畫矩形,起始座標為(pictureBox1.Width / 4, pictureBox1.Height/4),寬為,高為
            grfc.DrawRectangle(pen, pictureBox1.Width / 4, pictureBox1.Height / 4, pictureBox1.Width / 2, pictureBox1.Height / 2);
            pen = new Pen(Color.Blue, 1);
            //在畫板上畫橢圓,起始座標為(pictureBox1.Width / 4, pictureBox1.Height / 4),外接矩形的寬為160,高為160
            grfc.DrawEllipse(pen, pictureBox1.Width / 4, pictureBox1.Height / 4, 160, 160);
            //繪製文字,起點為160,160;
            grfc.DrawString("Drawing is here!", new Font("宋體", 14), new SolidBrush(Color.Red), new PointF(160, 160));

        }

執行效果如下:
在這裡插入圖片描述
下一步,我們介紹如何在圖片上載入水印,儲存帶有水印的圖片(包括給圖片加上文字資訊)