VB.NET - In Paintbox Objekte erzeugen (zeichnen)

Da ich kein VB.Net hab und ich ungern den Acrobat Reader anstart
(ich hasse das ding, bin aber auch zu faul was anderes zu suchen :D )
mach ich mal mit der letzten Frage falls sie noch nicht beantwortet wurde.

Noch eine weitere Frage: Ist es möglich, diese Formen, die ich in e.Graphics zeichne, auch transparent zu erzeugen? Bei den Windows Forms gibt es die Möglichkeit Opacity auf 0.5 oÄ. zu setzen.
Ist es dann nicht auch möglich, meine gezeichneten Formen transparent zu machen? Das wäre ziehmlich wichtig, auch wenn es etwas mehr Aufwand bedarf.
Im Grunde müsstest du nur den Alpha Wert der Farbe setzen dann sollte es schon funktionieren. Oder aber, da ich mir gerade nicht ganz sicher bin ob das bin dem Alpha Wert eifnach so funktioniert :-(
Könntest du auch über den HatchBrush Transparenz erzeugen
Code:
using (HatchBrush hb = new HatchBrush(HatchStyle.Percent30, Color.Balck, Color.Transparent))

Edit:
ok habs mir angesehen.
@Alaitoc ich würde nicht unbedingt mit Strings vergleichen
Code:
auswahl = "rechteck"
Verwendet lieber Enums. Ist besser Wart bar und weniger Fehler anfällig (Rechtschreibung, Groß-/Kleinschreibung, ...)
 
Zuletzt bearbeitet:
Ja die Frage war noch offen ;)
Und die Antwort genau die Richtige. Genau so sollte das sein ;)
Werde dann damit mal etwas herumexperimentieren,


Gruß DAvid
 
@Spyke: Vergleiche normalerweise auch anders...war halt einfach nur so ein Testdingens für mich damit ich weiß wie ich so Grafiken etc darstelle und zeichne :)

@David: Hab das mit der "Vorzeichnung" erst eingefügt als ich mir den Thread hier durchgelesen hab ^^ und dann hab ich net mehr dran gedacht *g*
 
Habe noch eine weitere Frage, die sich nicht direkt aufs Zeichnen in der PictureBox bezieht.
Und zwar soll meine PictureBox an die Größe der Form angepasst werden. Anfangs ist sie 640x480Pixel groß. Wenn ich nun in Laufzeit die Form-Größe ändere (Durch Ziehen mit der Maus) soll die PictureBox ebenfalls größer werden. Dabei sollten die Seitenverhältnisse ebenfalls erhalten bleiben.
Geht das nur durch Programmcode oder auch über die Eigenschaftsleiste?
 
entweder die Eigenschaft Dock der PictureBox setzen
Code:
meinPic.Dock=DockStyle.Fill
oder alternativ über Anchor
Code:
meinPic.Anchor=AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom

beides kannst du im Designer einstellen.
 
Also das mit der Form klappt nicht so richtig. Die PictureBox ist nie richtig eingebettet und hat dann noch die richtigen Seitenverhältnisse. Ich hab nun die Möglichkeit, die Form zu vergrößern/verkleinern einfach deaktiviert, so wichtig ist das nun auch wieder nicht. Aber eine andere Frage:
Ich hab einen SaveFileDialog eingebettet und alles soweit eingerichtet wie im folgenden Code zu sehen ist:
Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SaveFileDialog1.Title = "Bild speichern"
        SaveFileDialog1.Filter = "JPEG-Dateiformat (*.jpg)|*.jpg|Windows Bitmap (*.bmp)|*.bmp|Graphics Interchange Format (*.gif)|*.gif|PNG-Dateiformat (*.png)|*.png|TIFF-Dateiformat (*.tif)|*.tif"
        SaveFileDialog1.FilterIndex = 1

        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            If SaveFileDialog1.FileName <> "" Then
                Dim fs As System.IO.FileStream = CType(SaveFileDialog1.OpenFile(), System.IO.FileStream)
                ' Saves the Image in the appropriate ImageFormat based upon the
                ' file type selected in the dialog box.
                ' NOTE that the FilterIndex property is one-based.
                Dim Bild As Image = My.Resources._17052008109

                Dim Puffer As Graphics = Graphics.FromImage(Bild)
                Puffer = Objekte.SaveToImage(Bild, PictureBox1, Objekte.Element)

                Select Case SaveFileDialog1.FilterIndex
                    Case 1
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)
                    Case 2
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp)
                    Case 3
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Gif)
                    Case 4
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Png)
                    Case 5
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Tiff)
                End Select
                fs.Close()
            End If
        End If
    End Sub

Das Speichern an sich klappt auch, da ist alles richtig. Wenn ich jetzt aber beispielsweise als JPEG speichere und sich der Dialog nicht schließt, speichere ich einfach nochmal unter anderem Format, sagen wir PNG. Dann kommt eine Meldung die Datei würde bereits existieren mit der Dateierweiterung *.jpg. Das heißt er übernimmt einfach nicht die neue Dateiendung, obwohl ich diese im ComboFeld ausgewählt habe.
Woran könnte das liegen?


Gruß David
 
Wenn ich jetzt aber beispielsweise als JPEG speichere und sich der Dialog nicht schließt
Wie das Dialog schließt sich nicht :confused:
Ohne Meldung?

Sieht mir erstmal alels so richtig aus.

Bis auf:
Code:
 Dim Puffer As Graphics = Graphics.FromImage(Bild)
Puffer = Objekte.SaveToImage(Bild, PictureBox1, Objekte.Element)
Puffer scheint nicht wirklich irgendwo weiter Verwendung finden.

Und kenne mich mit VB jetzt nicht so aus, aber müsstest du nicht bei deinem SELECT CASE Anweisungen nicht auch noch ein break mit setzen?

Und einfach mal
Code:
Bild.Save(SaveFileDialog1.FileName)
probiert?
 
Wenn ich das mit Bild.SaveToImage mache, dann sind die Bilder 8 bis 9MB groß. Mit dem FileStream nur 400kB, das ist ein großer Vorteil. Diese Funktion SaveToImage ist etwas Irreführend. Da zeichne ich die Objekte alle aus meiner Bibliothek in das Bild. Dieser Puffer überträgt sich automatisch in die Bild-Variable. Wenn ich das Bild unter dem gewünschten Format gespeichert bekomme, dann ist das Ergebnis auch richtig. Das Problem ist eben nur, dass sich der Dialog nicht schließt und dass ich nicht unter anderen Formaten speichern kann.
Es bleibt immer das Format bestehen, welches ich beim ersten Programmstart ausgewahlt habe, dann kann ich alle Formate verwenden, nur eben nicht ohne das Programm neu zu starten. Kann es daran liegen, dass der Dialog die Dateierweiterung als DefaultExt setzt?

Gruß David
 
Kannst du die Exe mal reinstellen damit ich die Auswirkung mal sehe.

Was mich am meisten immer noch irritiert ist das das Fenster offen bleibt aber denoch gespeichert wird. (Du meinst schon das SaveFileDialog1?)
 
Hier ist erstmal der aktuelle Code:
Code:
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName <> "" Then
            Dim fs As System.IO.FileStream = CType(SaveFileDialog1.OpenFile(), System.IO.FileStream)
            ' Saves the Image in the appropriate ImageFormat based upon the
            ' file type selected in the dialog box.
            ' NOTE that the FilterIndex property is one-based.
            Dim Bild As Image = My.Resources._17052008109

            Dim Puffer As Graphics = Graphics.FromImage(Bild)
            Puffer = Objekte.SaveToImage(Bild, PictureBox1, Objekte.Element)

            Select Case SaveFileDialog1.FilterIndex
                Case 1
                    Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)
                Case 2
                    Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp)
                Case 3
                    Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Gif)
                Case 4
                    Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Png)
                Case 5
                    Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Tiff)
            End Select
            fs.Close()
        End If

Ich klicke auf Speichern, das ist die obige Prozedur. Dann speichere ich als JPEG und der Dialog schließt sich. Jetzt klicke ich wieder auf den Button und will unter gleichem Namen als GIF speichern. Dann erscheint die Meldung ob die JPEG Datei ersetzt werden solle. Wenn ich auf Ja klicke, wird die JPEG Datei auch ersetzt. Der Dialog bleibt somit bei der Endung JPEG.
Alternativ könnte ich den SaveFileDialog beim Klicken auf den Button mittels New... erzeugen, damit wäre das Problem behoben denke ich.


Gruß David
 
Zurück