2015-05-27 24 views
-1

我有一個可滾動的面板,其中圖像/圖片框位於之內。如何放大vb中的滾動面板內的圖像

我想放大和縮小圖像,而不會讓按鈕消失在面板的左下方。順便說一下,圖像是在它的實際大小。

如果我讓它成爲一個可以放大和縮小的可滾動面板,我還能通過不使用屏幕座標而是使用實際圖像座標來獲取圖像座標嗎?

請幫助我

回答

0

我不知道你所說的

放大的意思和縮小圖像而不按鈕消失

但是你可以使用創造了這個控制鮑勃鮑威爾。他的網站似乎已經離線了,但是我發現這個代碼:

Imports System 
Imports System.Collections 
Imports System.ComponentModel 
Imports System.Drawing 
Imports System.Drawing.Drawing2D 
Imports System.Windows.Forms 


Namespace bobpowell.net 
    '/ <summary> 
    '/ ZoomPicBox does what it says on the wrapper. 
    '/ </summary> 
    '/ <remarks> 
    '/ PictureBox doesn't lend itself well to overriding. Why not start with something basic and do the job properly? 
    '/ </remarks> 

    Public Class ZoomPicBox 
    Inherits ScrollableControl 

    Private _image As Image 

    <Category("Appearance"), Description("The image to be displayed")> _ 
    Public Property Image() As Image 
    Get 
     Return _image 
    End Get 
    Set 
     _image = value 
     UpdateScaleFactor() 
     Invalidate() 
    End Set 
    End Property 

    Private _zoom As Single = 1F 

    <Category("Appearance"), Description("The zoom factor. Less than 1 to reduce. More than 1 to magnify.")> _ 
    Public Property Zoom() As Single 
    Get 
     Return _zoom 
    End Get 
    Set 
     If value < 0 OrElse value < 1E-05 Then 
     value = 1E-05F 
     End If 
     _zoom = value 
     UpdateScaleFactor() 
     Invalidate() 
    End Set 
    End Property 


    Private Sub UpdateScaleFactor() 
    If _image Is Nothing Then 
     Me.AutoScrollMargin = Me.Size 
    Else 
     Me.AutoScrollMinSize = New Size(CInt(Me._image.Width * _zoom + 0.5F), CInt(Me._image.Height * _zoom + 0.5F)) 
    End If 
    End Sub 'UpdateScaleFactor 

    Private _interpolationMode As InterpolationMode = InterpolationMode.High 

    <Category("Appearance"), Description("The interpolation mode used to smooth the drawing")> _ 
    Public Property InterpolationMode() As InterpolationMode 
    Get 
     Return _interpolationMode 
    End Get 
    Set 
     _interpolationMode = value 
    End Set 
    End Property 


    Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs) 
    End Sub 'OnPaintBackground 

    ' do nothing. 

    Protected Overrides Sub OnPaint(e As PaintEventArgs) 
    'if no image, don't bother 
    If _image Is Nothing Then 
     MyBase.OnPaintBackground(e) 
     Return 
    End If 
    'Set up a zoom matrix 
    Dim mx As New Matrix(_zoom, 0, 0, _zoom, 0, 0) 
    mx.Translate(Me.AutoScrollPosition.X/_zoom, Me.AutoScrollPosition.Y/_zoom) 
    e.Graphics.Transform = mx 
    e.Graphics.InterpolationMode = _interpolationMode 
    e.Graphics.DrawImage(_image, New Rectangle(0, 0, Me._image.Width, Me._image.Height), 0, 0, _image.Width, _image.Height, GraphicsUnit.Pixel) 
    MyBase.OnPaint(e) 
    End Sub 'OnPaint 


    Public Sub New() 
    'Double buffer the control 
    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) 

    Me.AutoScroll = True 
    End Sub 'New 
    End Class 'ZoomPicBox 
End Namespace 'bobpowell.net