Интерполяционная аномалия при рисовании
У меня проблема с режимом сглаживания и рисования AntiAliasing. Допустим, у меня есть сигнал с минимальным и максимальным значениями в тех же точках. Поэтому я хочу показать его, чтобы увидеть, где он "толще".
Поэтому я использую метод рисования вертикальных линий и использования сглаживания. Вот в чем проблема, нарастающий фронт кажется сглаженным, а падение - нет. Если я добавлю шум ко второму сигналу, то же самое можно наблюдать.
Без шума
С шумом
Кто-нибудь может указать, что мне не хватает? Или эта проблема откуда-то еще?
Код (перенесено из комментариев):
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;
1 ответ
Решение
Примените также режим смещения пикселей:
drawGraph.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality;
InterpolationMode
может быть удалено, так как ничего не делает со строками (только с изображениями при изменении размера).