Hallo Community,
nach einer längeren Abstinenz habe ich mal wieder ein kleines C# Projekt an dem ich arbeite.
Und zwar soll das Ganze ein Editor für HMIs (GUIs) für eingebettete Systeme werden.
Das Zeichnen der GUI geschieht auf Basis des Tutorials hier:
[Tutorial] Gezeichnete Objekte mit der Maus verschieben
Klappt bisher soweit wunderbar, nur das Zoomen klappt noch nicht wie gewünscht. Im angehängten Screenshot ist der Ausgangszustand zu sehen.
In den nächsten beiden Beiträgen lad ich noch den Ist- und den Soll-Zustand hoch.
Wie kann ich beim Zoomen die Kantenglättung verhindern?
Hier der Code der das geglättete Ergebnis liefert:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
_canvas.Width = _width * _zoomFactor;
_canvas.Height = _height * _zoomFactor;
e.Graphics.SmoothingMode = SmoothingMode.None;
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
// Create canvas and set clipping
Region clip = new Region(_canvas);
clip.Intersect(e.Graphics.Clip);
e.Graphics.Clip = clip;
e.Graphics.Clear(_bgColor);
/* Replaced by "e.Graphics.PageScale = _zoomFactor;": */
//Matrix mat = new Matrix();
//mat.Scale(_zoomFactor, _zoomFactor, MatrixOrder.Append); //zoom to _zoomFactor
//e.Graphics.Transform = mat;
e.Graphics.PageScale = _zoomFactor;
foreach (BaseWidgetMdl vm in _model.Widgets)
{
if (vm.drawer != null)
{
vm.drawer.Draw(e.Graphics);
}
}
}
Ich denke dazu musst du zunächst Zeichnen und dann Skalieren.
Danke für den Tipp.
Ich habe mir zwischenzeitlich so beholfen dass ich erst in Originalgröße in ein Bitmap zeichne und dann beliebig hoch skaliere. Hierdurch habe ich auch die Möglichkeit das Bitmap auf Pixel Ebene zu manipulieren.
Für das Verschieben der Objekte mit der Maus werde ich dann eine(unsichtbaren) Ebene mit GraphicsPath Objekten einrichten.