我有一个自定义控件,用于查看具有缩放功能但没有scrollBar的图像,并且其工作状态良好。实际上,自定义控件是一个面板上有一个Picutrbox 。我还使用TrackBar来放大/缩小图像。它也工作得更好。
但我并不完全满意,即使它涵盖了我的应用程序的目的,因为我需要基于中心点缩放PictureBox 。现在它正在锚定左上角。
另一个是当缩小图像时,图像在TrackBar的零点处变为零。即使我将缩放级别限制在面板尺寸和工作状态,我的不满也发生在这里,因为它没有在TrackBar的零级响应。在这里我需要,图片框中加载的原始尺寸必须用于 100%的TrackBar ,当图像达到自定义控制尺寸时必须去 0%的TrackBar 。然后我会满满的。
我在这里找到我的代码.........
我的自定义控件是一个继承自Panel的用户控件。
cutom控件的代码:
Public Class ImageViewer
Inherits Panel
Dim AutoScaleDimensions As SizeF
Dim AutoScaleMode As AutoScaleMode
Protected Overrides Sub DefWndProc(ByRef m As Message)
If m.Msg <> 131 Then
MyBase.DefWndProc(m)
End If
End Sub
End Class
在Form1上,我放置了我的自定义控件 - ImageViewer1 ,并将 PicutreBox1 放在 ImageViewer1 中,已放置 Form1上的Button1和TrackBar1
更改属性如下
ImageViewer1 - AutoScroll = True
PicutreBox1 - SizeMode =缩放
TrackBar1-最大= 100
我声明的变量是
Dim imgName As String
Private SliderCenter As Integer = 50
Private originalImg As Bitmap
代码 Button1.Click
Try
Dim inputImg As FileDialog = New OpenFileDialog()
inputImg.Filter = "Image File (*.Jpg;*.Bmp;*.Png;*.Gif;*.Tiff;*.Tif;*.PDF)|*.Jpg;*.Bmp;*.Png;*.Gif;*.Tiff;*.Tif;*.PDF"
If inputImg.ShowDialog() = DialogResult.OK Then
imgName = inputImg.FileName
originalImg = New Bitmap(inputImg.FileName)
Dim newImg As New Bitmap(imgName)
PictureBox1.Image = DirectCast(newImg, Image)
End If
inputImg = Nothing
Catch ae As System.ArgumentException
imgName = ""
MessageBox.Show(ae.Message.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
TrackBar1.ValueChanged的代码
If originalImg IsNot Nothing Then
If TrackBar1.Value > 0 Then
Dim scale As Double = TrackBar1.Value
Dim height As Integer = Convert.ToInt32((scale / SliderCenter) * originalImg.Height)
Dim width As Integer = Convert.ToInt32((scale / SliderCenter) * originalImg.Width)
PictureBox1.Size = New Size(width, height)
If PictureBox1.Width <= ImageViewer1.Width Then
PictureBox1.Size = New Size(PictureBox1.Width + (ImageViewer1.Width - PictureBox1.Width), ImageViewer1.Height)
End If
If PictureBox1.Height <= ImageViewer1.Height Then
PictureBox1.Size = New Size(ImageViewer1.Width, PictureBox1.Height + (ImageViewer1.Height - PictureBox1.Height))
End If
End If
End If
请帮助我........谢谢。