none
Zeichnen in Picturebox.Image erzeugt unterschiedliche Ergebnisse RRS feed

  • 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ügen

     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.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
    Montag, 18. Oktober 2010 14:31

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

    • Als Antwort vorgeschlagen Heslacher Mittwoch, 20. Oktober 2010 07:55
    • Nicht als Antwort vorgeschlagen Okeanos85 Mittwoch, 20. Oktober 2010 14:04
    • Als Antwort markiert Okeanos85 Mittwoch, 20. Oktober 2010 14:07
    Mittwoch, 20. Oktober 2010 07:32
    Moderator
  • 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
    Mittwoch, 20. Oktober 2010 09:03

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

    Dienstag, 19. Oktober 2010 06:03
  • keiner eine Idee?
    Mittwoch, 20. Oktober 2010 06:46
  • 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

    Mittwoch, 20. Oktober 2010 06:58
    Moderator
  • 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

    • Als Antwort vorgeschlagen Heslacher Mittwoch, 20. Oktober 2010 07:55
    • Nicht als Antwort vorgeschlagen Okeanos85 Mittwoch, 20. Oktober 2010 14:04
    • Als Antwort markiert Okeanos85 Mittwoch, 20. Oktober 2010 14:07
    Mittwoch, 20. Oktober 2010 07:32
    Moderator
  • 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

    Mittwoch, 20. Oktober 2010 08:14
  • 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
    Mittwoch, 20. Oktober 2010 09:03
  • Danke an Euch beide, das sind die beiden Lösungen...

    MfG

    Okeanos

    Mittwoch, 20. Oktober 2010 14:07