2009-07-31 10 views
1

私はこの問題に直面し、徹底的な調査の結果、他の人に役立つ根本的な原因と回避策を見つけました。DSLツールでぼんやりしたアイコンデコレータを修正するには?

アイコンデコレータは、シェイプ上での位置付けとピクセルからインチへの変換が行われるため、「ぼやけた」状態になります。

通常、ドメイン固有言語の描画面は96dpiの解像度を持ち、アイコンデコレータは0.06インチのオフセットを使用して配置されています。これをピクセルに変換すると、描画面で5.76ピクセルのオフセットになります。画面上に「ハーフピクセル」を描くことは不可能であるため、GDI +は「ハーフピクセル」の位置をエミュレートするためにイメージを調整します。それが画像がぼやけてしまう理由です。

回避策として、アイコンデコレータの位置を固定するためのIconデコレータクラスのHorizo​​ntal OffsetとVertical Offsetプロパティを使用することをお勧めします。 「0.0025インチ」を垂直オフセットと水平オフセットとして使用すると、イメージの位置がインチからピクセルに変換されるとき、5.76ではなく6ピクセルになります。これはオフセットが0.06インチのデフォルト値に0.0025 = 0.0625を設定したオフセットになるためです。

透明性のあるpng画像を使用すると、私がここで示唆したオフセット回避策を使用しても、画像のぼかしが発生することがわかりました。イメージをビットマップ形式に変換すると、問題が解決されます。

問題を解決するための提案がある場合は、解決策または回避策を追加してください。

答えて

0

私は新しいビットマップ作成することによって、ぼやけた問題を修正しました:私はこの方法は、その元の画像を受信FixBitmap

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

私のカスタムメソッドを呼び出すオーバーライドされたメソッドの下

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

をDSLが表示されますが、代わりに全く同じ画像が返されますが、新しいビットマップとして作成されます

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

新しいインスタンスのプロパティを確認した場合、少しの違いがあります(約1年前にこれを実装しているので、私はまだ覚えていません)。 また、ほとんどの場合、透明性を持つ.pngファイルが使用されており、そのまま正確に表示されます。

これが役に立った。 さらに助けが必要な場合は、お気軽に よろしくお願いします。 Luís

関連する問題