Benutzer mit den meisten Antworten
Zeichnen in Picturebox.Image erzeugt unterschiedliche Ergebnisse

Frage
-
Hallo,
ich habe mir ein neues kleines Tool geschrieben welches für unsere Kunden Bildlienzen erstellt sprich bilder mit einem Wasserzeichen oder Text versieht und diese speichert/auf CD brennt/per e-mail versendet. Das Programm lief unter XP absolut richtig. Unter Win7 jedoch funktioniert die funktion für das Wasserzeichen nicht.
hier der wesentliche Code
-einfach ein neues Projekt anlegen
-eine Picturebox und eine Trackbar hinzufügenPrivate Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll 'pbspruch = eine standard picturebox PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppArgb) 'mein Graphics Objekt zum zeichnen, in dem fall schreiben Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) Dim f As New Font("Arial", 50, FontStyle.Regular, GraphicsUnit.Point) Dim c As New Color c = Color.FromArgb(TrackBar1.Value, Color.Red) Dim br As New SolidBrush(c) g.DrawString("asdf", f, br, 50, 0) PictureBox1.Refresh() End Sub
Unter XP funktioniert dieser Code unter Win 7 nicht.
Ist der Slider bei 0 dann ist unter beiden OS's der Text ganz transparent.
Sobald der Slider bei 1 steht ist unter XP der Text nicht mehr absolut Transparent was ja Richtig ist, unter Windows 7 jedoch ist keinerlei Transparenz mehr da.Woran liegt das und wie beseitige ich dieses Phänomen?
- Bearbeitet Okeanos85 Dienstag, 19. Oktober 2010 06:04
Antworten
-
Hallo Okeanos,
Es funktioniert bei mir auch in Windows 7 wenn ich bevor DrawString die Qualität der Textdarstellung festlege.
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll '//pbspruch = eine standard picturebox PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppArgb) '//mein Graphics Objekt zum zeichnen, in dem fall schreiben Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) Dim f As New Font("Arial", 50, FontStyle.Regular, GraphicsUnit.Point) Dim c As New Color c = Color.FromArgb(TrackBar1.Value, Color.Red) Dim br As New SolidBrush(c) '//g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias g.DrawString("asdf", f, br, 50, 0) PictureBox1.Refresh() End Sub
Grüße,
Robert
-
aber leider jedoch nicht die Ursache
Hallo Okeanos
es würde mich nicht wundern wenn die Ursache mal wieder bei ClearType mit GDI+ liegt, denn dein ursprünglicher Code läuft IMHO auch unter Win7, wenn ClearType abgestellt!
(bzw alle deine Fehler [+schwarz/rot, +67] gibts dann erst mit: TextRenderingHint.ClearTypeGridFit)
Auch wegen diesem ClearType (-Unsinn, IMHO) wurde in .NET 2.0 nachträglich TextRenderer:
http://msdn.microsoft.com/en-us/library/4ftkekek.aspx
eingebaut (via legacy-GDI), und in WPF musste auch mehrmals nachgebessert werden.
(aber beim InternetExplorer9 Beta hat MS immer noch nichts daraus gelernt)
ClearType ist IMHO ein mehrfach gescheitertes Projekt, MS sollte so ehrlich sein und dem Benutzer die Wahl lassen, darauf ganz zu verzichten (per Systemeinstellung).- Als Antwort markiert Okeanos85 Mittwoch, 20. Oktober 2010 14:06
Alle Antworten
-
ach ja, was ich vergessen habe zu erwähnen ich verwende VS2008 als Entwicklungsumgebung.
weiss jemand Rat?
P.S.:fügt man vor "g.DrawString("asdf", f, br, 50, 0)" die Zeile "g.clear(color.black)" ein so funktioniert das ganze.
Nun überlegte ich mir Color.Transparent zu verwenden, jedoch keine Lösung, selber Effekt wie vorher.
MfG
Okeanos
-
Hallo Okeanos_85_02,
Ich schaue es mal an.
Ist derselbe Effekt so wie hier: http://social.technet.microsoft.com/forums/en-us/w7itproui/thread/5A5C42BB-DA35-4179-8A90-58C8A999EAA2 ?
Grüße,
Robert
-
Hallo Okeanos,
Es funktioniert bei mir auch in Windows 7 wenn ich bevor DrawString die Qualität der Textdarstellung festlege.
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll '//pbspruch = eine standard picturebox PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppArgb) '//mein Graphics Objekt zum zeichnen, in dem fall schreiben Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) Dim f As New Font("Arial", 50, FontStyle.Regular, GraphicsUnit.Point) Dim c As New Color c = Color.FromArgb(TrackBar1.Value, Color.Red) Dim br As New SolidBrush(c) '//g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias g.DrawString("asdf", f, br, 50, 0) PictureBox1.Refresh() End Sub
Grüße,
Robert
-
Hallo Robert Breitenhofer,
ich danke Dir schon mal... das hat das Symptom behoben(reicht mir im Augenblick), aber leider jedoch nicht die Ursache und Schriften unter 10 sind dann so gut wie nicht mehr lesbar.
Noch etwas ist mir unter Windows 7 aufgefallen:
im Beispiel wird der Text nicht Rot sondern Scharz angezeigt.
ich habe im ersten Beispiel die Trackbar abgeändert: Trackbar.Maximum=200
Darauf hin kam es zu dem interessanten Effekt das der Text von schwarz zu Rot wechselt.
Und noch etwas ganz wichtiges:
Ich stellte die Schriftgröße mal auf 67 und siehe da es funktioniert alles 100% richtig.
MfG und vielen Dank nochmal...
Okeanos
-
aber leider jedoch nicht die Ursache
Hallo Okeanos
es würde mich nicht wundern wenn die Ursache mal wieder bei ClearType mit GDI+ liegt, denn dein ursprünglicher Code läuft IMHO auch unter Win7, wenn ClearType abgestellt!
(bzw alle deine Fehler [+schwarz/rot, +67] gibts dann erst mit: TextRenderingHint.ClearTypeGridFit)
Auch wegen diesem ClearType (-Unsinn, IMHO) wurde in .NET 2.0 nachträglich TextRenderer:
http://msdn.microsoft.com/en-us/library/4ftkekek.aspx
eingebaut (via legacy-GDI), und in WPF musste auch mehrmals nachgebessert werden.
(aber beim InternetExplorer9 Beta hat MS immer noch nichts daraus gelernt)
ClearType ist IMHO ein mehrfach gescheitertes Projekt, MS sollte so ehrlich sein und dem Benutzer die Wahl lassen, darauf ganz zu verzichten (per Systemeinstellung).- Als Antwort markiert Okeanos85 Mittwoch, 20. Oktober 2010 14:06