2009-07-31 9 views
1

J'ai fait face à ce problème et après une recherche approfondie, j'ai trouvé sa cause et une solution de contournement qui peut être utile pour d'autres personnes.Comment réparer Icon Browser floue sur DSL Tools?

Le décorateur d'icônes devient "flou" car son positionnement sur la forme et la conversion des pixels en pouces.

Habituellement, la surface de dessin de la langue spécifique au domaine a une résolution de 96 ppp et les décorateurs d'icônes sont positionnés en utilisant un décalage de 0,06 pouces. En le traduisant en pixels, il devient un décalage de 5,76 pixels dans la surface de dessin. Comme il n'est pas possible de dessiner un "demi-pixel" sur l'écran, le GDI + ajuste l'image pour tenter d'émuler le positionnement "pixel haf". C'est la raison pour laquelle l'image devient floue. Ma suggestion pour contourner le problème consiste à utiliser les propriétés Décalage horizontal et Décalage vertical de la classe de décorateur d'icônes pour fixer la position du décorateur «demi-pixel». Si vous utilisez les "0,0025" pouces comme décalages verticaux et horizontaux, lorsque le positionnement de l'image est traduit de pouces en pixels, il devient 6 pixels, au lieu de 5,76. Cela arrive parce que le décalage est maintenant la valeur par défaut 0,06 pouces plus le décalage que vous avez défini 0,0025 = 0,0625.

J'ai également trouvé que l'utilisation d'images PNG avec transparence provoque le flou de l'image, même en utilisant la solution de contournement de décalage que j'ai suggéré ici. La conversion de l'image au format bitmap résout le problème.

Si quelqu'un a également des suggestions pour résoudre le problème, veuillez ajouter votre solution ou solution de contournement.

Répondre

0

je résolu le problème flou en créant une nouvelle image:

Sous la méthode surchargée

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

j'appelle ma méthode personnalisée FixBitmap

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

Cette méthode reçoit l'image originale DSL montrerait, mais renvoie à la place exactement la même image, mais créé comme une nouvelle Bitmap

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

Si vous vérifiez les propriétés de la nouvelle instance, il y a peu de différences (je ne me souviens pas très bien de ce que j'ai mis en œuvre il y a environ 1 an). En outre, j'utilise principalement des fichiers .png avec transparence et ils ressemblent exactement comme ils sont.

J'espère que cela a aidé. Si vous avez besoin d'aide, n'hésitez pas, Cordialement, Luís