5

私がそのようなものを描くとき(ここではランダムな絵だけ):

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DrawingVisual visual = new DrawingVisual();
        DrawingContext context = visual.RenderOpen();

        Pen pen = new Pen(Brushes.Black, 1);

        context.DrawEllipse(Brushes.YellowGreen, pen, new Point(0,0), 40, 40);

        for (int i = 0; i <= 100 - 1; i++)
          context.DrawLine(new Pen(Brushes.Black, 1), new Point(0, i), new Point(i, i));

        context.Close();

        RenderTargetBitmap bmp = new RenderTargetBitmap(100, 100, 96, 96, PixelFormats.Pbgra32);

        bmp.Render(visual);
        image1.Source = bmp;
    }
}

DrawLine と DrawEllipse の色が混ざります。(ペンを使用するのは DrawLine のみであり、ブラシを使用する Rectangle や Ellipse などの他のフォームではないことがわかりました)。不思議なことに、基礎となるグリッドの背景 (argh) の LinearGradientBrush からの色でも。 それらをそれぞれ完全な不透明度で z オーダーにしたいと思います。

XAML コードは次のとおりです。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Image Name="image1" Stretch="None" />
</Window>

助けてくれてありがとう。

4

4 に答える 4

2

投稿したコードは、複数の細い線を並べて描画しています。それらのそれぞれはアンチエイリアス処理されており、側面がぼやけています。あなたが説明した不透明混合効果は、このために発生すると思います。

1 本の太い線 (つまり幅 10) を描いた場合、効果は現れません。

したがって、解決策は、達成しようとしているものによって異なります。

  • これで問題がなければ、アンチエイリアスを無効にしてみてください。詳細については、こちらをご覧ください: WPF イメージでのアンチエイリアスの無効化
  • 幅の広いペンで線を描く、つまりnew Pen(Brushes.Black, 2)
  • 互いに近い線を描画するこの特定のケースでは、カウンターを 1 ではなく 0.5f ずつインクリメントできるため、 に置き換えfor (int i = 0; i <= 100 - 1; i++)ますfor (float i = 0.0f; i <= 100 - 1; i+=0.5f)
  • さらにコードを書くことを気にしない場合は、画像がぼやけない独自のカスタム Bitmap クラスを作成できます。いくつかの解決策は、 http://www.nbdtech.com/Blog/archive/2008/11/20/blurred-images-in-wpf.aspxおよびそこで参照されているサイトで利用できます。
于 2012-06-12T17:17:09.190 に答える