vb.net怎么能缩放图像

时间:2014-11-08 09:18:34

标签: vb.net visual-studio-2010

我有一个自定义控件,用于查看具有缩放功能但没有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

请帮助我........谢谢。

0 个答案:

没有答案