GDI+ Bild unscharf

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    GDI+ Bild unscharf

    Hallo,

    ich war grade dabei, mir einen Button für mein neues Projekt zu schreiben. Dabei soll in die mitte des Buttons ein Bild in original größe(42x42) eingefügt werden. Das einfügen ist auch kein Problem, nur das Bild ist dann ziemlich unscharf(liegt anscheinend daran, dass das Bild vergrößert wird). Hier mal ein vergleichs Bild(links vom Button und rechts iner Picturebox)





    Mit diesem Code füge ich das Bild ein:


    VB.NET-Quellcode

    1. Dim img As Image = Me.Image
    2.  
    3. If Me.Image IsNot Nothing Then
    4. If AutoCenterImg = True ThenDim Position As New Point((Me.Width - img.Width) * 0.5, (Me.Height - img.Height) * 0.5)
    5. graphic.DrawImageUnscaled(img, Position)
    6. Else
    7. graphic.DrawImageUnscaled(img, ImagePoint)
    8. End IfEnd If


    Smoothinmode steht auf AntiAlias. Weiß jemand wie ich verhindern kann, dass das Bild vergrößert wird ? Habe es schon mit DrawImageUnscaled versucht allerdings mit dem gleichen Ergebnis.

    Danke für eure Hilfe :)
    msdn.microsoft.com/en-us/libra…ionmode%28v=VS.80%29.aspx

    Damit gibst du den Algorithmus an, wie vergrößert werden soll...

    Ansonsten sollte DrawImage, sofern du nur zwei Punkte angibst in der Originalgröße Zeichnen...
    Achja außerdem ist eigt. gerade AntiAlias dafür zuständig die kannten Zu glätten :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Enixus schrieb:

    Hatte neulich ein ähnliches Problem. Schau mal, mit welchen DPI-Wert du das Bild speicherst. Photoshop speichert wohl von Werk aus mit 72 dpi, Windows rechnet aber mit 96 dpi. Suche dort mal die Fehlerquelle.



    Jap... das Bild hat ne auflösung von 72dpi. Muss ich die DPI im Bild ändern oder kann ich irgendwie die auflösung im Code angeben ?



    EDIT: Habe grade mal mit Photoshop getestet. Auf 96dpi is das Bild genau so scharf wie iner Picturebox :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „viperkill“ ()

    Nimm ein ToolStrip, da kannst Du die Button-Bild-Eigenschaften setzen:
    ToolStrip:
    GripStyle = Hidden

    ToolStripButton:
    DisplayStyle = Image
    ImageScaling = None
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und warum nicht einfach bei GDI bleiben?

    Hab neulich mal sowas ähnliches zusammengeschustert und es hat ganz gut funktioniert:

    VB.NET-Quellcode

    1. Dim btnctl As Button = Button1
    2. Dim btnimg As New Bitmap(btn.Size.Width,btn.Size.Height)
    3. Dim srcimg As Image.FromFile("C:\test.jpg")
    4. Dim e As Graphics.FromImage(btnimg)
    5. e.DrawImage(srcimg, New Rectangle(New Point(0,0), btnimg.size)
    6. btnctl.Image = btnimg


    Hat bei mir ganz gut funktioniert. Brauchte keinen besonderen Algorithmus oder sonstiges O.o Kann aber auch daran liegen, dass meine verwendeten Bilder eher zu groß als zu klein waren...

    MfG,
    X-Zat / Momo

    X-Zat schrieb:

    Hab neulich mal sowas ähnliches zusammengeschustert und es hat ganz gut funktioniert:

    Warum wiederholst du mich? :huh:

    Edit: Jetzt fällts mir mal auf:
    Wenn man genau schaut
    (Jetzt wiederhol' ich das Bild ;P)

    Hat der Button einfach einen größeren Text!
    Hast du vielleicht AutoSize auf True, oder so? :whistling: