2009-07-31 11 views
1

Ich stand vor diesem Problem und nach einer umfangreichen Recherche fand ich die Ursache und eine Workaround, die für andere Menschen nützlich sein kann.Wie man verwischt Icon Decorator auf DSL-Tools zu beheben?

Der Symboldekorator wird "verschwommen", weil er auf die Form und die Umwandlung von Pixeln in Zoll eingestellt ist.

Normalerweise hat die Zeichnungsoberfläche der domänenspezifischen Sprache eine Auflösung von 96 dpi und die Icon Decorators werden mit einem Offset von 0,06 Zoll positioniert. Übertragen auf Pixel wird es zu einem Offset von 5,76 Pixel in der Zeichenfläche. Da es nicht möglich ist, ein "halbes Pixel" auf dem Bildschirm zu zeichnen, passt das GDI + das Bild an, um die "haf pixel" -Positionierung zu emulieren. Das ist der Grund, warum das Bild unscharf wird.

Mein Vorschlag als Abhilfe, ist die Verwendung der horizontalen Offset und der vertikalen Offset-Eigenschaften der Icon Dekorator-Klasse für die Fixierung der "Halbpixel" Decorator Position. Wenn Sie die "0,0025" Zoll als vertikalen und horizontalen Offset verwenden, wird die Bildpositionierung von Zoll zu Pixel 6 statt 5,76 Pixeln. Es passiert, weil der Versatz jetzt der Standardwert 0,06 Zoll plus der Offset ist, den Sie festlegen 0,0025 = 0,0625.

Ich fand auch, dass die Verwendung von PNG-Bildern mit Transparenz die Bildunschärfe verursacht, auch mit der Offset-Problemumgehung, die ich hier vorgeschlagen habe. Konvertieren des Bildes in Bitmap-Format behebt das Problem.

Wenn auch jemand Vorschläge zur Behebung des Problems hat, fügen Sie bitte Ihre Lösung oder Workaround hinzu.

Antwort

0

fixierte ich das verschwommene Problem durch eine neue Bitmap zu erstellen:

Unter der überschriebene Methode

public override System.Drawing.Image GetDisplayImage(ShapeElement parentShape) 

ich meine eigene Methode nennen FixBitmap

Bitmap imageFixed = DynamicImageHelper.FixBitmap(image, out dynamicOffset); 

Diese Methode das Originalbild empfängt, DSL würde zeigen, aber liefert stattdessen das exakt gleiche Bild aber erstellt als neue Bitmap

Bitmap fixedImage = new Bitmap(original, original.Width, original.Height); 
return fixedImage; 

Wenn Sie die Eigenschaften der neuen Instanz überprüfen, gibt es kleine Unterschiede (ich erinnere mich nicht mehr genau, weil ich dies vor etwa einem Jahr implementiert habe). Außerdem verwende ich meistens .png-Dateien mit Transparenz und sie sehen genauso aus wie sie sind.

Hoffe das half. Wenn Sie weitere Hilfe benötigen, zögern Sie nicht, Grüße, Luís