Die vorherigen Antworten, obwohl gut gemeint, waren nur teilweise richtig.
Was war richtig? PictureBox stellt InterpolationMode nicht bereit.
Was war von 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 erhalten kein Anti-Aliasing, wenn SmoothingMode auf SmoothingMode.AnitAlias festgelegt ist.
2) Die Verwendung eines Panels, wenn Sie ein deutliches Interesse an der Verwendung der Funktionen von PictureBox bekundet haben, ist die falsche Richtung. Ihnen fehlt die Möglichkeit, Bilder direkt zu laden, zu speichern oder zuzuordnen, ohne diese Eigenschaften explizit zu codieren. . . Warum das Rad neu erfinden? Durch Ableiten von PictureBox erhalten Sie all das kostenlos.
Die Nachrichten werden noch besser, als ich die harte Arbeit für Sie getan habe und es dauerte weniger Zeit als das Schreiben dieser Nachricht.
Ich habe zwei Versionen zur Verfügung gestellt, die beide von PictureBox abgeleitet sind. Zuerst ist ein einfaches Beispiel, das immer die bestmögliche Wiedergabequalität verwendet. Dies ist auch das langsamste Rendering. Zweite ist eine Klasse, die es jedem erlaubt, die verschiedenen Rendering-Parameter über Eigenschaften der abgeleiteten Klasse einzustellen. Einmal eingestellt, werden diese im OnPaint Override verwendet.
public class HighQualitySmoothPictureBox : PictureBox
{
protected override void OnPaint(PaintEventArgs pe)
{
// This is the only line needed for anti-aliasing to be turned on.
pe.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
// the next two lines of code (not comments) are needed to get the highest
// possible quiality of anti-aliasing. Remove them if you want the image to render faster.
pe.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
pe.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
// this line is needed for .net to draw the contents.
base.OnPaint(pe);
}
}
...
public class ConfigurableQualityPictureBox : PictureBox
{
// Note: the use of the "?" indicates the value type is "nullable."
// If the property is unset, it doesn't have a value, and therefore isn't
// used when the OnPaint method executes.
System.Drawing.Drawing2D.SmoothingMode? smoothingMode;
System.Drawing.Drawing2D.CompositingQuality? compositingQuality;
System.Drawing.Drawing2D.InterpolationMode? interpolationMode;
public System.Drawing.Drawing2D.SmoothingMode? SmoothingMode
{
get { return smoothingMode; }
set { smoothingMode = value; }
}
public System.Drawing.Drawing2D.CompositingQuality? CompositingQuality
{
get { return compositingQuality; }
set { compositingQuality = value; }
}
public System.Drawing.Drawing2D.InterpolationMode? InterpolationMode
{
get { return interpolationMode; }
set { interpolationMode = value; }
}
protected override void OnPaint(PaintEventArgs pe)
{
if (smoothingMode.HasValue)
pe.Graphics.SmoothingMode = smoothingMode.Value;
if (compositingQuality.HasValue)
pe.Graphics.CompositingQuality = compositingQuality.Value;
if (interpolationMode.HasValue)
pe.Graphics.InterpolationMode = interpolationMode.Value;
// this line is needed for .net to draw the contents.
base.OnPaint(pe);
}
}
Jede Idee, wo ich eine herunterladbare finden konnte, oder wie meine eigenen gehen zu tun? Ich bin ein Anfänger C# -Entwickler, und das Schreiben meiner eigenen könnte eine Aufgabe, die etwas über meine derzeitigen Fähigkeiten ist. –
Als Anfänger die einfachste Möglichkeit zum Starten der Rolling-eigenen Klasse möglicherweise ein Panel-Steuerelement platzieren, und schreiben Sie dann sein Paint-Ereignis (im Eigenschaftenfenster, wählen Sie Ereignisse [das Blitzsymbol] und doppelklicken Sie neben dem Paint-Ereignis in der Liste). Verwenden Sie den e.Graphics-Parameter, um Ersatzzeichencode zu schreiben. – David
Great Great Great ,,, Million Dank – bebosh