| |
VB.NET - Ein- und UmsteigerBild vertikal drehen | | | Autor: Marty** | Datum: 16.08.16 16:06 |
| Hallo,
ich suche eine Möglichkeit das in der Picturebox erzeugte Bild zu drehen.
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Private pictureBox1 As New PictureBox()
Public Sub CreateBitmapAtRuntime()
pictureBox1.Size = New Size(210, 110)
Me.Controls.Add(pictureBox1)
Dim flag As New Bitmap(200, 100)
Dim flagGraphics As Graphics = Graphics.FromImage(flag)
Dim red As Integer = 0
Dim white As Integer = 11
While white <= 100
flagGraphics.FillRectangle(Brushes.Red, 0, red, 200, 10)
flagGraphics.FillRectangle(Brushes.White, 0, white, 200, 10)
red += 20
white += 20
End While
pictureBox1.Image = flag
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
CreateBitmapAtRuntime()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles _
Button2.Click
??????
End Sub
End Class Gruß | |
Re: Bild vertikal drehen | | | Autor: Marty** | Datum: 16.08.16 17:16 |
| habe es so geschafft:
Dim b As Bitmap = pictureBox1.Image.Clone
Dim g As Graphics = Graphics.FromImage(pictureBox1.Image)
g.Dispose()
b.Dispose()
pictureBox1.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)
pictureBox1.Refresh() Wenn ich aber diesen Code in einem anderem Programm verwende, erhalte ich
system.NullReferenceException | |
Re: Bild vertikal drehen | | | Autor: keco | Datum: 17.08.16 20:21 |
| Ja. Wahrscheinlich, weil pictureBox1.Image null (bzw. Nothing) ist.
Was sollen eigentlich die ersten 4 Zeilen bezwecken? Wozu ein Bitmap und ein Graphics-Objekt erzeugen, wenn du sie ungenutzt wieder entsorgst? | |
Re: Bild vertikal drehen | | | Autor: Marty** | Datum: 17.08.16 21:37 |
| Hallo,
pictureBox1.Image null
getestet mit
If PictureBox1.Image Is Nothing Then
MsgBox("is nothing ")
Else
MsgBox("Bild drinnen ")
End If
Aber warum ist das so ? Sehe ja, das etwas in der Picturebox gezeichnet ist. | |
Re: Bild vertikal drehen | | | Autor: Manfred X | Datum: 18.08.16 07:44 |
| Hallo!
Das kann diverse Gründe haben.
Einige Beispiele:
- Die Picturebox besitzt eine BackgroundImage-Eigenschaft.
- Die Paint-Methode der Picturebox (ggf. OnPaint) zeichnet direkt auf
der Oberfläche.
- Es könnte sich ein weiteres Control an der Stelle der Picturebox befinden.
Solange der Image-Methode der Picturebox kein Objekt zugewiesen worden ist,
bleibt der Wert "Nothing". | |
Re: Bild vertikal drehen | | | Autor: keco | Datum: 18.08.16 18:22 |
| Das liegt vermutlich daran, dass der von dir gepostete Code irgendwann aufgerufen wird, noch bevor das Bild zugewiesen wurde, also in irgendeiner Initialisierungsmethode oder ähnliches.
Wenn man mit Ereignissen arbeitet, dann muss man sich im Klaren sein, wann das Ereignis ausgelöst wird. Vorallem beim Initialisieren des Formulars kann es zu mehreren Aufrufen kommen - je nach Fall. | |
Re: Bild vertikal drehen | | | Autor: Marty** | Datum: 18.08.16 19:12 |
| Hallo,
hier nochmal ein Beispiel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
Dim g As Graphics = PictureBox1.CreateGraphics()
g.FillEllipse(Brushes.Red, 10, 10, 40, 40)
End Sub
End Class Was müsste in einen zweiten Button, damit ich den Inhalt der Picturebox ausdrucken könnte ? | |
Re: Bild vertikal drehen | | | Autor: Manfred X | Datum: 19.08.16 09:39 |
| Hallo!
Nochmal:
Du zeichnest auf der Oberfläche der Picturebox.
Dabei entsteht keine beständige Graphik.
Nur wenn Du Draw-Operationen (Code) im Paint-Event der Box
ausführst, werden die Zeichenmethoden bei Bedarf (z.B. nach Verdeckung)
stets neu ausgeführt (Ereignisauslösung).
Wenn Du in eine beständige Graphik erstellen möchtest,
mußt Du ein Bild in eine Bitmap laden laden oder eine Bitmap-Instanz
in der gewünschten Größe erstellen.
Per Graphics-Objekt (am besten: Using-Block [Graphics, Pen, Brush])
kann direkt in diese Bitmap gezeichnet werden.
Die Bitmap kann (für die Anzeige) der Image-Eigenschaft einer Picturebox
zugewiesen werden.
Für den Druck stehen im Framework spezielle Klassen zur Verfügung.
http://stackoverflow.com/questions/5920989/printing-content-of-a-picturebox
http://stackoverflow.com/questions/14039752/printing-picture-box
Oder so etwas ...
http://www.vbarchiv.net/tipps/details.php?id=1765
Beitrag wurde zuletzt am 19.08.16 um 09:52:07 editiert. | |
Re: Bild vertikal drehen | | | Autor: Marty** | Datum: 21.08.16 20:11 |
| Hi,
hat zwar ein bisschen gedauert. Aber jetzt funktioniert das ganze.
bmp.RotateFlip(RotateFlipType.Rotate180FlipX) Ich würde das Bild auch noch gerne in einem festgelegten Druckbereich hineinscalieren
gr.DrawImage(Bild, 101, 100, 582, 300) Bei der Picturebox gibt es ja die Möglichkeit von SizeMode (AutoSize).
Gibt es diese Möglichkeit beim drucken auch ?
Gruß | |
Re: Bild vertikal drehen | | | Autor: Manfred X | Datum: 22.08.16 10:57 |
| Hallo!
Mit dieser Bitmap-Erweiterungsmethode
kannst Du eine Bitmap durch einen Faktor zoomen
(neue Bitmap in neuer Größe - z.B. für den Druck)
Module modBitmapFunctions
<System.Runtime.CompilerServices.Extension()> _
Public Function Zoom(ByVal bmp As Bitmap, _
zoomfactor As Double) As Bitmap
If bmp Is Nothing Then Return Nothing
Dim newwidth As Integer = CInt(bmp.Width * zoomfactor)
Dim newheight As Integer = CInt(bmp.Height * zoomfactor)
If newwidth < 2 Or newheight < 2 Then Return Nothing
Dim newrect As New Rectangle(0, 0, newwidth, newheight)
Dim newbmp As New Bitmap(newwidth, newheight)
Using g As Graphics = Graphics.FromImage(newbmp)
g.DrawImage(bmp, newrect)
End Using
Return newbmp
End Function
End Module | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere Infos
|