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;
Все примеры взяты из этого поста.