Folgendes Problem:
Ein Bild, welches größer als die PictureBox ist soll mithilfe der ScrollBars gescrollt werden. Die Scrollbars sind bereits da!
Dieses Problem wurde bereits angesprochen, aber die Lösung, die PictureBox in einem Panel zu verschieben kommt nicht in Frage, weil die Größe der PictureBox und das darin angezeigte Bild mit soziemlich dem ganzen restlichen Programm zusammenhängen.
Ich würde das so lösen, dass ich aus dem Originalbild den Teil herauszeichne, welcher in die PictureBox passt und diesen Teil dann anzeige.
Aber wie kann ich diesen Teil möglichst elegant auslesen? Es würde zwar mit Schleifen funktionieren, indem man jedes einzelne Pixel ausliest und anhängt, das wird aber im Nachhinein wenn die Größe der PictureBox verändert wird etwas langsam sein.
Auch mit den Werten der ScrollBars bin ich mir noch nicht ganz sicher.
Ich hätte mir das so vorgestellt:
(Das mit den Einzügen funktioniert irgendwie nicht richtig)
Also in die Events "ScrollX()" und "ScrollY()" würde dann der Code von euch Pro's reinkommen.
Ja, ich weiß-> kein C&P.
Ich hab noch einen Screenshot der Form angehängt, die angezeigt wird. Wenns hilft.
Ein Bild, welches größer als die PictureBox ist soll mithilfe der ScrollBars gescrollt werden. Die Scrollbars sind bereits da!
Dieses Problem wurde bereits angesprochen, aber die Lösung, die PictureBox in einem Panel zu verschieben kommt nicht in Frage, weil die Größe der PictureBox und das darin angezeigte Bild mit soziemlich dem ganzen restlichen Programm zusammenhängen.
Ich würde das so lösen, dass ich aus dem Originalbild den Teil herauszeichne, welcher in die PictureBox passt und diesen Teil dann anzeige.
Aber wie kann ich diesen Teil möglichst elegant auslesen? Es würde zwar mit Schleifen funktionieren, indem man jedes einzelne Pixel ausliest und anhängt, das wird aber im Nachhinein wenn die Größe der PictureBox verändert wird etwas langsam sein.
Auch mit den Werten der ScrollBars bin ich mir noch nicht ganz sicher.
Ich hätte mir das so vorgestellt:
VB.NET-Quellcode
- 'Diese Sub wird nach dem Laden des Bildes aufgerufen
- Private Sub SetScrollValues()
- 'Wenn das Zoomverhalten der PictureBox auf "Zoom" gestellt ist
- 'wäre das Verwenden der Scrollfunktion sinnlos
- If PictureBox_Anzeige.SizeMode = PictureBoxSizeMode.Zoom Then
- 'Für die Optik werden die Maximum-Werte auf 0 gesetzt
- ScrollBar_X.Maximum = 0
- ScrollBar_Y.Maximum = 0
- Else
- 'Weiters muss das Bild in der Picturebox in den X oder Y Werten
- 'größer als die der PictureBox selbst sein (sorry, Grammatik)
- If PictureBox_Anzeige.Image.Width > PictureBox_Anzeige.Width Then
- 'Diese undurchschaubare Rechnung ergibt sich so: Wenn die ScrollBar_X ganz links ist
- '(also die "Value" Eigenschaft den Wert null hat) liegt das Pixel 0 des Originalbildes
- 'am linken Rand. Wenn die ScrollBar ganz rechts ist und der Maximum Wert gleich dem Wert
- 'der "Width" Eigenschaft des Bildes wäre, würde der rechte Rand des Bildes entsprechend
- 'der Verschiebung nach links aus dem Rand der PictureBox verschwinden. Darum diese Rechnung
- ScrollBar_X.Maximum = PictureBox_Anzeige.Image.Width - PictureBox_Anzeige.Width
- 'Anschließend wird (Infolge des Scrollens) zentriert
- ScrollBar_X.Value = ScrollBar_X.Maximum / 2
- Else
- ScrollBar_X.Maximum = 0
- End If
- If PictureBox_Anzeige.Image.Height > PictureBox_Anzeige.Height Then
- 'Das selbe wie vorher
- ScrollBar_Y.Maximum = PictureBox_Anzeige.Image.Height - PictureBox_Anzeige.Height
- ScrollBar_Y.Value = ScrollBar_Y.Maximum / 2
- Else
- ScrollBar_Y.Maximum = 0
- End If
- End If
- End Sub
- 'Die folgenden Ereignisse bearbeiten nun das Scrollen des Bildes
- Private Sub ScrollX() Handles ScrollBar_X.Scroll
- End Sub
- Private Sub ScrollY() Handles ScrollBar_Y.Scroll
- End Sub
(Das mit den Einzügen funktioniert irgendwie nicht richtig)
Also in die Events "ScrollX()" und "ScrollY()" würde dann der Code von euch Pro's reinkommen.
Ja, ich weiß-> kein C&P.
Ich hab noch einen Screenshot der Form angehängt, die angezeigt wird. Wenns hilft.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils