利用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