ZedGraph в PDF с помощью MigraDoc

В настоящее время я работаю над приложением C#, которое нацелено на выполнение некоторых вычислений и вывод графиков в PDF-файл.

Я использую библиотеку Zedgraph для рисования своих графиков, что-то вроде graphPane.AddCurve(PointPairList). Теперь я попытался вывести эти графики в PDF-файл через пакет MigraDoc.

В настоящее время у меня есть скрипт, который отображает Zedgraph в растровое изображение, а затем вставляет его в файл PDF. Так что-то вроде этого:

private Bitmap getBitMap()
{

  ZedGraphControl graph = new ZedGraphControl();

  newGraph = graphPane.Clone();

  SizeF s = new SizeF(3.5f, 4.5f);
  newGraph.Scale(s);

  newGraph.DrawToBitmap(bit, new Rectangle(0, 0, newGraph.Width,    newGraph.Height));

  return bit;

}

Проблема в том, что это дает мне слегка пиксельное изображение на странице PDF. И мне нужен этот график, чтобы он был очень высокого качества. Есть ли что-то, что я могу изменить, чтобы улучшить качество, или я должен изменить весь свой подход для такой вещи.

Огромное спасибо заранее.

1 ответ

Решение

По умолчанию Bitmap у вас есть текущее разрешение экрана, которое может быть столь же низким, как 75dpi, чаще 96dpi; более современные мониторы имеют 120dpi или больше, но начинается хорошее качество печати 150dpi, Для действительно искаженных изображений, которые вы хотите 300dpi и чтобы позволить масштабирование вы можете иметь 600dpi или больше..

Поэтому вам нужно создать и заполнить растровое изображение большего размера и взять под контроль его разрешение в точках на дюйм.

Предполагая, что ваш размер 3.5f x 4.5f дюймов, для 300dpi тебе необходимо Bitmap с 1050 x 1350 пиксели.

Так что вы должны создать такой Bitmap..:

Bitmap bmp = new Bitmap(1050, 1350);

..и установите разрешение:

bmp.SetResolution(300, 300);

Чтобы заполнить его, ваш элемент управления должен иметь одинаковый размер:

newGraph.ClientSize = bmp.Size;

Сейчас DrawToBitmap должно создать изображение, которое будет четким и пригодным для увеличения..

Обратите внимание, что не имеет значения, является ли элемент управления слишком большим, чтобы поместиться на экране; DrawToBitmap все еще будет работать.

Обновление В дополнение к достаточному разрешению интересно рисовать качественные линии и т. Д. Особенностью ZedGraph является то, что можно включить сглаживание, либо для отдельных линий:

curve_x.Line.IsAntiAlias = true;

или другие элементы:

myPane.XAxis.Scale.FontSpec.IsAntiAlias = true;

или вся диаграмма:

zedGraphControl1.IsAntiAlias = true;

Все примеры взяты из этого поста.

Другие вопросы по тегам