程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 利用PictureClip進行圖像局部處理

利用PictureClip進行圖像局部處理

編輯:VB綜合教程
在圖像的處理過程中經常需要對圖像進行局部放大或其它處理操作,在VB中提供了一個非常實用的圖像處理控件PictureClip,利用此控件可以方便的完成圖像的局部放大或縮小操作。PictureClip控件的功能就是對一個原始位圖進行剪裁,根據用戶的需要可以有兩種剪裁方法,第一種方法是確定固定的剪裁尺寸,通過確定橫向與縱向的剪裁份數,控件均勻地把原始位圖分成不同的圖像塊,通過序號可以訪問每一個圖像塊,此時需要的屬性有:PicClip1.Picture:指定被剪裁的圖像;PicClip1.Cols:確定剪裁的橫向份數;PicClip1.Rows:確定剪裁的縱向份數;PicClip1.GraphicCell(i):訪問第i個圖像塊;另一種剪裁方法是隨機剪裁,確定剪裁的起點,再確定需要剪裁的橫向與縱向尺寸,此固定區域內的圖像即剪裁為一可訪問的圖像,涉及的屬性有:    PictureClip1.ClipX:指定剪裁的橫向起點坐標;
   PictureClip1.ClipY:指定前裁的縱向起點坐標;    PictureClip1.ClipHeight:指定剪裁的橫向長度;   
   PictureClip1.ClipWidth:指定剪裁的縱向長度;
   PictureClip1.Clip:訪問被剪裁的圖形;
  還有兩個重要的屬性,即StretchX和StretchY,此屬性指定被剪裁目標的圖像的大小,當此值與原始位圖尺寸不相同時,將引起剪裁圖像的放大或縮小,這就是利用此控件進行圖像局部放大或縮小的原理;
  利用上述兩種剪裁方法均可以進行圖像的局部放大或縮小處理,但在實際應用中還是第二種剪裁方法更為實用,在具體的編程時還應注意以下幾點:
  1.在PictureClip的StretchX及其它屬性中均以象素為單位,所以在對圖像進行操作時必須置作圖單位為象素,即使用ScaleMode=3命令;
  2.在進行隨機剪裁時,如果使用固定的剪裁尺寸,當剪裁坐標移到圖像的邊緣時,圖像實際尺寸小於剪裁尺寸,將引起邊界溢出,解決的辦法是始終以鼠標坐標點之後的圖像尺寸為剪裁尺寸,然後再調整StretchX及StretchY值為剪裁尺寸的固定倍數,即可實現局部圖像固定比率的放大或縮小操作;
  3.放大或縮小的局部圖像需要裝入圖像框或其它容器控件中,此窗口的位置必須是靈活變化的,即自動讓開被剪裁的區域,可通過判斷被剪裁區域起點的位置來臨時調整圖像框Letf及Top屬性來完成;
  
  在下面是一個完整的演示程序,需要在窗體中放置一個PictureClip1及兩個PictureBox控件,Picture1可為任意大小,而Picture2最好接近窗體的1/4,用於顯示局部放大或縮小的圖像,之後把下面的代碼填入相應的事件之中,運行程序之後,將在屏幕上顯示圖像,用鼠標在此圖像上移動,如果按下左鍵移動則實現圖像的局部放大,按下右鍵移動實現圖像的局部縮小,不按下任何鍵則只在小窗口內顯示原尺寸的局部圖像,剪裁的起點是鼠標當前位置。
  
  以上程序及方法在WINDOWS95系統下、VB5.0環境下調試通過。
  
  附原程序:(下載)
  注釋:准備窗體和圖像框
  PrivateSubForm_Load()
  Picture1.ScaleMode=3
  Picture1.Picture=LoadPicture("c:windowssetup.bmp")
  Form1.Width=Screen.Width
  Form1.Height=Screen.Height
  Form1.Top=0
  Form1.Left=0注釋:修改PICTURE尺寸與屏幕相同
  Picture1.Width=Screen.Width
  Picture1.Height=Screen.Height
  Picture1.Top=0
  Picture1.Left=0
  PictureClip1.Picture=Picture1.Picture
  EndSub
  注釋:移動鼠標放大或縮小圖像
  PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
  Dimpx,py,LeftDown,rightDown,num
  LeftDown=(ButtonAndvbLeftButton)>0rightDown=(ButtonAndvbRightButton)>0
  IfLeftDownThennum=2注釋:左鍵按下放大二位
  Else
  IfrightDownThennum=1/2注釋:右鍵按下縮小
  Elsenum=1注釋:無鍵按下原來尺寸
  EndIf
  EndIf
  IfX<Picture1.ScaleWidth/2Then
  px=Picture1.Width/2
  Else
  px=0
  EndIf
  IfY<Picture1.ScaleHeight/2Then
  py=Picture1.Height/2
  Else
  py=0
  EndIf
  Picture2.Left=px
  Picture2.Top=py注釋:以上實時調整小窗口坐標
  Form1.Caption=Str$(X) ":" Str$(Y)PictureClip1.ClipX=X注釋:以當前鼠標位置為起點
  PictureClip1.ClipY=Y
  PictureClip1.ClipHeight=Picture1.ScaleHeight-Y
  PictureClip1.ClipWidth=Picture1.ScaleWidth-X
  PictureClip1.StretchX=(Picture1.ScaleWidth-X)*num
    PictureClip1.StretchY=(Picture1.ScaleHeight-Y)*num
  Picture2.Picture=PictureClip1.Clip注釋:小窗口顯示圖像
  EndSub->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved