欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用C#繪制九宮格形式的圖片

 更新時間:2022年01月26日 11:39:45   作者:gc_2299  
大家好,本篇文章主要講的是用C#繪制九宮格形式的圖片,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

使用GDI+產(chǎn)生九宮格形式的圖片,不考慮局部放大的功能。具體的方式如下:

方法一:圖片上繪制直線

  想到的最簡單粗暴的方式就是直接在圖片上繪制九宮格的線,看著像是切成了九片,實際上還是完整的圖片,主要代碼及效果如下所示:

	 m_startX = pnlCanvas.Width / 6;
     m_startY = pnlCanvas.Height / 6;
     m_imageWidth = pnlCanvas.Width - m_startX * 2;
     m_imageHeight = pnlCanvas.Height - m_startY * 2;

     e.Graphics.DrawImage(m_image, m_startX, m_startY, m_imageWidth, m_imageHeight);

     using (Pen p = new Pen(Brushes.White,m_lineWidth))
     {
         int stepX = m_imageWidth / 3;
         int stepY = m_imageHeight / 3;

         for(int i=1;i<3;i++)
         {
             e.Graphics.DrawLine(p, m_startX + i * stepX, m_startY, m_startX + i * stepX, m_startY + m_imageHeight);
             e.Graphics.DrawLine(p, m_startX, m_startY + i * stepY, m_startX + m_imageWidth, m_startY + i * stepY);
         }
     }

在這里插入圖片描述

這種方式的缺點是白線會遮住部分圖片內(nèi)容。如果要實現(xiàn)局部放大,就要計算并保存每部分圖片的位置和大小,等鼠標(biāo)移動到圖片區(qū)域時,將該部分圖片放大繪制即可。

方法二:切分繪制圖片

  Graphics類中的DrawImage函數(shù)有一個重載函數(shù),可以將圖片的部分區(qū)域內(nèi)容繪制到指定區(qū)域,可以利用該函,將原圖分為九個區(qū)域,然后依次繪制到窗口中,在加上線條即可構(gòu)成九宮格形式。主要代碼及效果圖如下所示:
  這種方式的問題是繪制線條時難以精確的將線條繪制到預(yù)留的線條區(qū)域,看著效果不太好。

	 m_startX = pnlCanvas.Width / 6-2*m_lineWidth; 
     m_startY = pnlCanvas.Height / 6 - 2 * m_lineWidth;
     m_imageWholeWidth = pnlCanvas.Width - m_startX * 2;
     m_imageWholeHeight = pnlCanvas.Height - m_startY * 2;
     int srcImageSplittedWidth = m_image.Width / 3;
     int srcImageSplittedHeight = m_image.Height / 3;
     int destImageSplittedWidth = (m_imageWholeWidth - 2 * m_lineWidth) / 3;
     int destImageSplittedHeight = (m_imageWholeHeight - 2 * m_lineWidth) / 3;
     
	 for (int heightIndex = 0; heightIndex < 3; heightIndex++)
     {
         for (int widthIndex = 0; widthIndex < 3; widthIndex++)
         {
             g.DrawImage(m_image,
                 new Rectangle(m_startX + destImageSplittedWidth * widthIndex + m_lineWidth * widthIndex, m_startY + destImageSplittedHeight * heightIndex + m_lineWidth * heightIndex, destImageSplittedWidth, destImageSplittedHeight),
                 new Rectangle(srcImageSplittedWidth * widthIndex, srcImageSplittedHeight * heightIndex, srcImageSplittedWidth, srcImageSplittedHeight), GraphicsUnit.Pixel);
         }                
     }
     
	 using (Pen p = new Pen(Brushes.White, m_lineWidth))
     {
        p.Alignment = System.Drawing.Drawing2D.PenAlignment.Center;
        for (int i = 1; i < 3; i++)
        {
            g.DrawLine(p, m_startX + destImageSplittedWidth * i + m_lineWidth * i, m_startY, m_startX + destImageSplittedWidth * i + m_lineWidth * i, m_startY + m_imageWholeHeight);
            g.DrawLine(p, m_startX, m_startY + i * destImageSplittedHeight + m_lineWidth * i, m_startX + m_imageWholeWidth, m_startY + i * destImageSplittedHeight + m_lineWidth * i);
        }
     }        

在這里插入圖片描述

為避免上述問題,將圖片背景設(shè)置為白色,這樣繪制完九片圖形后,結(jié)合背景色,看著就是九宮格形式。代碼就補貼了,就是上面的代碼去掉繪制線條部分,然后在繪制圖片前用白色填充圖片區(qū)域即可。代碼效果如下圖所示。

在這里插入圖片描述

此時還有一點問題,就是右側(cè)和下方還有一丁點空白(感覺是計算各屬性值時取整造成的)。為消除空白,直接在填充圖片區(qū)域背景色時,填充寬度和高度減少2像素,這樣就不會出現(xiàn)上述問題了。最終的效果如下所示:

g.FillRectangle(Brushes.White, m_startX, m_startY, m_imageWholeWidth-2, m_imageWholeHeight-2);

在這里插入圖片描述

總結(jié)

到此這篇關(guān)于用C#繪制九宮格形式的圖片的文章就介紹到這了,更多相關(guān)C#九宮格圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#使用HttpPost請求調(diào)用WebService的方法

    C#使用HttpPost請求調(diào)用WebService的方法

    這篇文章主要為大家詳細(xì)介紹了C#使用HttpPost請求調(diào)用WebService的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#實現(xiàn)CSV文件讀寫的示例詳解

    C#實現(xiàn)CSV文件讀寫的示例詳解

    這篇文章主要介紹了CsvHelper、TextFieldParser、正則表達(dá)式三種解析CSV文件的方法,順帶也會介紹一下CSV文件的寫方法,需要的可以參考一下
    2023-05-05
  • WinForm項目開發(fā)中WebBrowser用法實例匯總

    WinForm項目開發(fā)中WebBrowser用法實例匯總

    這篇文章主要介紹了WinForm項目開發(fā)中WebBrowser用法,需要的朋友可以參考下
    2014-08-08
  • C#?Sqlite數(shù)據(jù)庫的搭建及使用技巧

    C#?Sqlite數(shù)據(jù)庫的搭建及使用技巧

    這篇文章主要介紹了C#?Sqlite數(shù)據(jù)庫的搭建及使用技巧,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 在C#里面給PPT文檔添加注釋的實現(xiàn)代碼

    在C#里面給PPT文檔添加注釋的實現(xiàn)代碼

    平常開會或者做總結(jié)報告的時候我們通常都會用到PowerPoint演示文稿,我們可以在單個幻燈片或者全部幻燈片里面添加注釋,這樣觀眾可以從注釋內(nèi)容里面獲取更多的相關(guān)信息,需要的朋友可以參考下
    2017-01-01
  • 簡單實現(xiàn)C#窗體程序判斷是否閏年

    簡單實現(xiàn)C#窗體程序判斷是否閏年

    這篇文章主要介紹了簡單實現(xiàn)C#窗體程序判斷是否閏年的相關(guān)代碼,禁止窗體調(diào)整大小,關(guān)閉窗體前的判斷,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#使用Win32?Api實現(xiàn)進程注入到wechat的過程

    C#使用Win32?Api實現(xiàn)進程注入到wechat的過程

    這篇文章主要介紹了C#使用Win32?Api實現(xiàn)進程注入到wechat,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • C#中this的使用實例分析

    C#中this的使用實例分析

    這篇文章主要介紹了C#中this的使用方法,this是C#程序設(shè)計中非常重要的一個關(guān)鍵字,本文以實例形式對此作出簡單的用法分析,需要的朋友可以參考下
    2014-08-08
  • C#中常見的文件處理操作小結(jié)

    C#中常見的文件處理操作小結(jié)

    這篇文章主要為大家詳細(xì)介紹了C#中常見的一些文件處理操作,例如文件管理,獲取文件信息和控制處理文件,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C#實現(xiàn)六大設(shè)計原則之迪米特法則

    C#實現(xiàn)六大設(shè)計原則之迪米特法則

    這篇文章介紹了C#實現(xiàn)六大設(shè)計原則之迪米特法則的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評論