Wie zeichne glatte Bilder mit C #?

7

Ich versuche, Bilder in einem C # -Formular (in PictureBoxes sowie mit Graphics.DrawImage ()) zu zeichnen und suche nach einer Möglichkeit, sie glatt zu zeichnen. Die Bilder müssen ein Format sein, das Transparenz unterstützt, also PNG, GIF, SVG und WMF. C # unterstützt SVG-Dateien nicht von Anfang an und ich habe keine gute Drittanbieter-Bibliothek gefunden (ich habe SvgNet gefunden, konnte es aber nicht herausfinden).

Ich muss eine WMF-Datei zeichnen, die C # über die Image.FromFile () - Funktion ausführen kann, aber nicht anti-aliased. Ich habe mich gefragt, ob es irgendeinen Weg gibt, das auszugleichen?

    
Cody Gray 19.02.2009, 17:08
quelle

2 Antworten

15

Die vorherigen Antworten, obwohl gut gemeint, waren nur teilweise richtig.

Was war korrekt? PictureBox stellt Interpolationsmodus nicht bereit.

Was war außerhalb der Basis?

1) Sie können diese Eigenschaft im Paint-Ereignis problemlos über das Bildfeld im übergeordneten Element oder über eine Überschreibung in einer abgeleiteten Klasse festlegen. . . So oder so funktioniert es und beides ist genauso einfach. Wenn jedoch SmoothingMode nicht festgelegt ist, wird der Interpolationsmodus ignoriert. Sie werden kein Anti-Aliasing erhalten, ohne dass SmoothingMode auf SmoothingMode.AnitAlias ​​gesetzt ist.

2) Verwenden Sie ein Panel, wenn Sie ein klares Interesse an der Verwendung der Funktionen von PictureBox bekundet haben, ist dies die falsche Richtung. Ihnen fehlt die Möglichkeit, Bilder direkt zu laden, zu speichern oder zuzuordnen, ohne diese Eigenschaften explizit zu codieren. . . Warum erfinden Sie das Rad neu? Wenn Sie PictureBox ableiten, bekommen Sie alles kostenlos dazu.

Die Nachrichten werden noch besser, da ich die harte Arbeit für euch erledigt habe und es weniger Zeit gekostet hat, diese Nachricht zu schreiben.

Ich habe zwei Versionen zur Verfügung gestellt, die beide von PictureBox abgeleitet sind. First ist ein einfaches Beispiel, das immer die bestmögliche Wiedergabequalität verwendet. Dies ist auch das langsamste Rendering. Second ist eine Klasse, die es jedem ermöglicht, die verschiedenen Rendering-Parameter über Eigenschaften der abgeleiteten Klasse festzulegen. Einmal eingestellt, werden diese in der OnPaint-Überschreibung verwendet.

%Vor%

...

%Vor%     
Jason D 21.11.2009 05:18
quelle
7

Wenn Sie das Bild auf eine Zeichenfläche zeichnen, können Sie den Interpolationsmodus auf einen etwas schöneren als den nächsten Nachbarn ändern, um skalierte Bilder zu glätten:

%Vor%

Sie müssen System.Drawing.Drawing2D hinzufügen, um die InterpolationMode-Enumeration zu erhalten.

Die Verwendung von PictureBox ist ein Problem - es stellt keine InterpolationMode-Eigenschaft zur Verfügung, Sie müssen also Ihre eigene rollen oder eine herunterladen.

    
David 19.02.2009 17:21
quelle

Tags und Links