Hallo zusammen,
für mein neues Projekt benötige ich Eure Hilfe.
Innerhalb einer festen Pictureboxgröße soll dass angezeigte Bild vergrößert und verkleinert werden.
Mein bisheriger Code sieht so aus:
Dim bmp As Bitmap
Dim resizingFactor As Double = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
' Hier deaktiviert, da die Werte über Setting-Werte ermittelt werden
'Me.Dateiname.Text = My.Settings.AktuellesVerzeichnis &
' My.Settings.AktuelleDatei & "." & My.Settings.AktuelleDateiEndung
Me.Dateiname.Text="C:\Temp\Bilder\DSCF0001.JPG"
imgOriginal = Image.FromFile(Me.Dateiname.Text)
Bildanzeige.Image = imgOriginal
bmp = New Bitmap(Me.Dateiname.Text)
' ZoomSlider einstellen
zoomSlider.Minimum = -1000
zoomSlider.Maximum = 1000
zoomSlider.SmallChange = 1
zoomSlider.LargeChange = 1
zoomSlider.UseWaitCursor = False
Zoomfaktor.Text = 1
end sub
Private Sub Bildanzeige_Paint(ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles Bildanzeige.Paint
If bmp IsNot Nothing Then
e.Graphics.InterpolationMode = _
Drawing2D.InterpolationMode.NearestNeighbor
e.Graphics.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
If resizingFactor = 0 Then Exit Sub
If resizingFactor > 0 Then
Dim targetRect As New Rectangle(5, 5, bmp.Width * _
resizingFactor, bmp.Height * resizingFactor)
e.Graphics.DrawImage(bmp, New Rectangle(targetRect.Location, _
targetRect.Size))
e.Graphics.DrawRectangle(Pens.Lime, targetRect)
Else
resizingFactor = resizingFactor * -1
Dim targetRect As New Rectangle(5, 5, bmp.Width / _
resizingFactor, bmp.Height / resizingFactor)
e.Graphics.DrawImage(bmp, New Rectangle(targetRect.Location, _
targetRect.Size))
e.Graphics.DrawRectangle(Pens.Lime, targetRect)
End If
End If
end sub
Private Sub zoomSlider_Scroll(ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.ScrollEventArgs) Handles zoomSlider.Scroll
Zoomfaktor.Text = zoomSlider.Value / 10
resizingFactor = Zoomfaktor.Text
Bildanzeige.Refresh()
End Sub
Private Sub Panel1_Scroll(ByVal sender As Object, ByVal e As _
System.Windows.Forms.ScrollEventArgs) Handles Panel1.Scroll
Bildanzeige.Refresh()
End Sub Benötigt werden
1 x Panel = Panel1
1 x Picturebox = Bildanzeige (liegt im Panel)
1 x HScrollbar = ZoomSlider
1 x Textbox = ZoomFaktor
Panel hat Autoscroll = true
Picturebox hat Sizemode = AutoSize
Was bisher funktioniert:
- Über den Zoomslider kann ich das Rectangle-Bild verkleinern und Vergrößern. Es fängt links oben bei 5,5 an und einen grünlichen (Lime) Rand, der sich auch bei einer Verkleinerung irgendwann kpl. innerhalb des Panels zeigt. Die linke obere Ecke und die Farbe ändern ist erst einmal kein Problem.
- Da ja das Panel die Scrollbalken hat und das Panel bzw. die Picturebox das Originalbild in Originalgröße anzeigt, kann ich mit den Scrollbalken auch das Bild in der Anzeige entsprechend verschieben.
Was nicht geht:
- Das Bild kann ich über die Scrollbalken nicht kpl. anzeigen lassen. Ich sehe somit nicht alles, selbst wenn die Scrollbalken ganz unten bzw. ganz oben sind. Dies ist hoffentlich weg, wenn der nächste Punkt gelöst ist.
- Das verkleinerte/vergrößerte Bild wird nicht in die Picturebox in dieser Größe des Rectangles übernommen (Hierfür bräuchte ich eben Eure Hilfe).
Wäre echt Super, wenn mir jemand von Euch eine Lösung meines Problems nennen könnte.
Vielen Dank
Volker |