1

アンチエイリアススムージングモードと描画に問題があります。同じポイントに最小値と最大値を持つ信号があるとしましょう。だから、どこが「厚い」かを確認するために表示したいと思います。

したがって、私が使用する方法は、垂直線を描画し、アンチエイリアスを使用することです。ここに問題があります。立ち上がりエッジはアンチエイリアス処理されているように見えますが、立ち下がりエッジはアンチエイリアス処理されていません。2番目の信号にノイズを追加すると、同じことが観察できます。

ノイズなし

ノイズあり

![ノイズあり] [2]

誰かが私が欠けているものを指摘できますか?それとも、この問題はどこかから来ていますか?

コード(コメントから移動):

Bitmap drawBitmap = new Bitmap(pictureBox1.Height, _
                               pictureBox1.Width, _
                               System.Drawing.Imaging.PixelFormat.Format32bppArgb);

Graphics drawGraph;

Point[] pts = new Point[] { new Point(0, 60), new Point(0, 59), new Point(1, 35), _
                            new Point(1, 47), new Point(2, 25), new Point(2, 35), _
                            new Point(3, 17), new Point(3, 25), new Point(4, 12), _
                            new Point(4, 27), new Point(5, 10), new Point(5, 22), _
                            new Point(6, 10), new Point(6, 11), new Point(7, 11), _
                            new Point(7, 16), new Point(8, 16), new Point(8, 24), _
                            new Point(9, 24), new Point(9, 34), new Point(10, 34), _
                            new Point(10, 46), new Point(11, 46), new Point(11, 59), _
                            new Point(12, 59), new Point(12, 72)};

using (drawGraph = Graphics.FromImage(drawBitmap)) {

    drawGraph.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;
    drawGraph.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias; 

for (int i = 1; i < pts.Length - 1; i += 2) {
    drawGraph.DrawLine(new Pen(Color.Black, 1), pts[i], pts[i - 1]); 
    drawGraph.DrawLine(new Pen(Color.Black, 1), pts[i], pts[i + 1]);
    }
} 

pictureBox1.Image = drawBitmap;
4

1 に答える 1

1

ピクセルオフセットモードも適用します。

drawGraph.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality;

InterpolationMode線では何もしないので削除できます(サイズ変更されたときの画像のみ)。

于 2012-12-18T16:00:50.443 に答える