vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Bild 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ß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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".
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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ß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel