用C#繪制九宮格形式的圖片_第1頁
用C#繪制九宮格形式的圖片_第2頁
用C#繪制九宮格形式的圖片_第3頁
用C#繪制九宮格形式的圖片_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第用C#繪制九宮格形式的圖片目錄方法一:圖片上繪制直線方法二:切分繪制圖片總結(jié)使用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(Penp=newPen(Brushes.White,m_lineWidth))

intstepX=m_imageWidth/3;

intstepY=m_imageHeight/3;

for(inti=1;ii++)

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)局部放大,就要計算并保存每部分圖片的位置和大小,等鼠標移動到圖片區(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;

intsrcImageSplittedWidth=m_image.Width/3;

intsrcImageSplittedHeight=m_image.Height/3;

intdestImageSplittedWidth=(m_imageWholeWidth-2*m_lineWidth)/3;

intdestImageSplittedHeight=(m_imageWholeHeight-2*m_lineWidth)/3;

for(intheightIndex=0;heightIndexheightIndex++)

for(intwidthIndex=0;widthIndexwidthIndex++)

g.DrawImage(m_image,

newRectangle(m_startX+destImageSplittedWidth*widthIndex+m_lineWidth*widthIndex,m_startY+destImageSplittedHeight*heightIndex+m_lineWidth*heightIndex,destImageSplittedWidth,destImageSplittedHeight),

newRectangle(srcImageSplittedWidth*widthIndex,srcImageSplittedHeight*heightIndex,srcImageSplittedWidth,srcImageSplittedHeight),GraphicsUnit.Pixel);

using(Penp=newPen(Brushes.White,m_lineWidth))

p.Alignment=System.Drawing.Drawing2D.PenAlignment.Center;

for(inti=1;ii++)

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ū)域背景色時,填充寬度和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論