利用PictureClip進行圖像局部處理

發表于:2007-07-14來源:作者:點擊數: 標簽:
李瑩 在圖像的處理過程中經常需要對圖像進行局部放大或 其它處理操作, 在 VB 中提供了一個非常實用的圖像處理控 件PictureClip,利用此控件可以方便的完成圖像的局部放 大或縮小操作。PictureClip 控件的功能就是對一個原始 位圖進行剪裁, 根據用戶的需要可以
李瑩

  在圖像的處理過程中經常需要對圖像進行局部放大或 其它處理操作, 在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,用于顯示局部放大或縮小的圖像, 之后把下面的代碼填入相應的事件之中, 運行程序之后, 將在屏幕上顯示圖像, 用鼠標在此圖像上 移動, 如果按下左鍵移動則實現圖像的局部放大, 按下右 鍵移動實現圖像的局部縮小, 不按下任何鍵則只在小窗口 內顯示原尺寸的局部圖像, 剪裁的起點是鼠標當前位置。

  以上程序及方法在WINDOWS 95系統下、VB5.0環境下調 試通過。

   附原程序: (下載
   注釋:準備窗體和圖像框
Private Sub Form_Load()
  Picture1.ScaleMode = 3
  Picture1.Picture = LoadPicture("c:\windows\setup.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
End Sub
注釋:移動鼠標放大或縮小圖像
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim px, py, LeftDown, rightDown, num
  LeftDown = (Button And vbLeftButton) > 0 rightDown = (Button And vbRightButton) > 0
  If LeftDown Then num = 2 注釋:左鍵按下放大二位
  Else
    If rightDown Then num = 1 / 2 注釋:右鍵按下縮小
    Else num = 1 注釋:無鍵按下原來尺寸
    End If
  End If
  If X < Picture1.ScaleWidth / 2 Then
    px = Picture1.Width / 2
  Else
    px = 0
  End If
  If Y < Picture1.ScaleHeight / 2 Then
    py = Picture1.Height / 2
  Else
    py = 0
  End If
  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 注釋:小窗口顯示圖像
End Sub

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97