2015-05-27 2 views
-1

У меня есть прокручиваемая панель с изображением/изображением внутри.как увеличить изображение внутри прокручиваемой панели в vb

Я хотел увеличить и уменьшить изображение без кнопок, которые исчезают в нижней левой части панели. кстати, изображение в фактическом размере.

Если я создаю прокручиваемую панель, которую можно увеличить и уменьшить, смогу ли я получить координаты изображения, не используя координаты экрана, а координаты фактического изображения?

Pls помочь мне

ответ

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 
Смежные вопросы