Это проблема высокого уровня, которую я пытаюсь решить ...
У меня есть стороннее построение графиков (IoComp Plot), и я хочу встроить высококачественное (не менее 600 dpi) растровое изображение элемента управления Plot в отчеты, созданные другим пакетом отчетов сторонних производителей (Combit List & Label).
Этот подход кажется наиболее перспективным до сих пор ...
--- Редактировать ---:
Попробовав множество других подходов, я думаю, что единственное, что я могу сделать, - это создать скрытый экземпляр элемента управления Plot со всем масштабированием до размера принтера (примерно в 5 раз больше размера экрана). Это включает в себя ширину и высоту, размеры шрифта, ширину линии - каждый видимый компонент элемента управления. Тьфу!
------
Я могу получить объект Graphics с надлежащим разрешением из события PrintPage элемента управления сюжетом, но преобразование его в растровое изображение, чтобы пакет отчета был счастливым, оказалось главным камнем преткновения. Несколько часов поисков привели к тому, что другие люди задавали тот же вопрос, но не дали жизнеспособных ответов.
Единственное многообещающее руководство, которое я нашел, предложило использовать один из конструкторов Bitmap, который принимает экземпляр Graphics в качестве параметра.
Однако, это не работает для меня. Он создает растровое изображение, но без содержимого из элемента управления «График» - это чисто черное изображение.
Вот мой код (отредактированный для отображения рисования красной линии на объекте Graphics):
void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// Draw a red line on the Graphics object. When printed, this
// line is shown as part of the normal Plot graphics.
Pen myPen;
myPen = new Pen(Color.Red);
e.Graphics.DrawLine(myPen, 0, 0, 200, 200);
myPen.Dispose();
// Create a bitmap from the Graphics object
Bitmap bm = new Bitmap(1000, 1000, e.Graphics);
// Save to disk
// DOES NOT WORK - CREATES FILE THAT IS PURE BLACK (VIEWED
// WITH "PAINT" PROGRAM)
bm.Save(@"C:\Bicw_Dev\Bic.Net\FrontEnd\GraphicsToBmp.bmp", ImageFormat.Bmp);
bm.Dispose();
}
Кто-нибудь может подсказать, почему это не работает? Это даже правильный подход?
Также обратите внимание:
Насколько я могу определить (а я потратил немало времени на поиск) нет способа получить высокое разрешение и качество печати Bitmap непосредственно из элемента управления Plot !
Я подчеркиваю это, потому что несколько других, кто задал вопрос, получили образцы кода в ответ, которые решили противоположную проблему - преобразование битовой карты в графику.
Мне нужно преобразовать объект Graphics в объект Bitmap .
И если кто-нибудь может предложить альтернативный подход, который позволит мне включить в свои отчеты качество печати изображений моих графиков, пожалуйста, не стесняйтесь. (Например, я могу получить растровое изображение низкого качества (72 бит / дюйм) из элемента управления Plot, и я пытался его растянуть, но я никогда не видел, чтобы этот подход работал хорошо в других приложениях). 1052 *
Спасибо
-Tom Bushell
Редактировать в ответ на комментарий:
В качестве эксперимента я добавил следующее:
Pen myPen;
myPen = new Pen(Color.Red);
e.Graphics.DrawLine(myPen, 0, 0, 200, 200);
myPen.Dispose();
Это привело к рисованию красной линии над графикой графика, когда я печатал свой график. Но это никак не повлияло на растровое изображение - оно все еще чисто черное.