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

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

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

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

方法一:圖片上繪制直線

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

	 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);
         }
     }

在這里插入圖片描述

這種方式的缺點(diǎn)是白線會遮住部分圖片內(nèi)容。如果要實(shí)現(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é)合背景色,看著就是九宮格形式。代碼就補(bǔ)貼了,就是上面的代碼去掉繪制線條部分,然后在繪制圖片前用白色填充圖片區(qū)域即可。代碼效果如下圖所示。

在這里插入圖片描述

此時還有一點(diǎn)問題,就是右側(cè)和下方還有一丁點(diǎn)空白(感覺是計算各屬性值時取整造成的)。為消除空白,直接在填充圖片區(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)文章

最新評論