c # создание графики - PullRequest
0 голосов
/ 05 июня 2009

У меня есть код, который используется для программного создания документа для отправки на принтер. Это выглядит примерно так:

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev) 
{      
      ev.Graphics.DrawImage(pictureBox1.Image, 50, 100);

      string drawToday="Date      : "+strToday;
      string drawPolicyNo="Policy # : " + strPolicyNo;
      string drawUser="User     : " + strUser;
      Font drawFont=new Font("Arial",30);
      SolidBrush drawBrush=new SolidBrush(Color.Black);
      PointF drawPointToday=new Point(50,400);
      PointF drawPointPolicyNo=new Point(50,450);
      PointF drawPointUser=new Point(50,500);
      ev.Graphics.DrawString(drawToday,drawFont,drawBrush,drawPointToday);
      ev.Graphics.DrawString(drawPolicyNo,drawFont,drawBrush,drawPointPolicyNo);
      ev.Graphics.DrawString(drawUser,drawFont,drawBrush,drawPointUser);
}

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

Спасибо

Редактировать : Спасибо, я понял, что мне просто нужен другой объект Graphics, но сам объект Graphics не имеет общедоступного конструктора, поэтому я ищу предложение о том, какой объект мне нужен подстать, чтобы иметь возможность создавать объект Graphics для рисования. Я думал, возможно, растровое изображение? Битовые карты, конечно, основаны на пикселях, а не на точечных, поэтому я не был уверен, что это лучший способ использования.

Ответы [ 2 ]

5 голосов
/ 05 июня 2009

Если я вас правильно понимаю, вы можете просто разбить код из вашего обработчика событий на другой метод, принимающий графический объект в качестве параметра:

private void Print(Graphics g)
{
    g.DrawImage(pictureBox1.Image, 50, 100);

    string drawToday="Date      : "+strToday;
    string drawPolicyNo="Policy # : " + strPolicyNo;
    string drawUser="User     : " + strUser;
    Font drawFont=new Font("Arial",30);
    SolidBrush drawBrush=new SolidBrush(Color.Black);
    PointF drawPointToday=new Point(50,400);
    PointF drawPointPolicyNo=new Point(50,450);
    PointF drawPointUser=new Point(50,500);
    g.DrawString(drawToday,drawFont,drawBrush,drawPointToday);
    g.DrawString(drawPolicyNo,drawFont,drawBrush,drawPointPolicyNo);
    g.DrawString(drawUser,drawFont,drawBrush,drawPointUser);
}

И затем вызовите этот метод из вашего обработчика событий:

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev) 
{      
      Print(ev.Graphics);
}

Затем вы можете использовать тот же метод для печати вывода в любой другой экземпляр Graphics:

using (Bitmap img = new Bitmap(width, height))
using (Graphics g = Graphics.FromImage(img))
{
    Print(g);
    img.Save(fileName);
}
2 голосов
/ 05 июня 2009

Чтобы записать свой графический объект в файл изображения, вы можете сделать что-то вроде этого:

public void SaveImage(Graphics surface)
{
  Bitmap bmp = new Bitmap(50, 100, surface);
  bmp.Save("filename.png", ImageFormat.Png);
}

Вы можете выбрать другие форматы из класса ImageFormat, такие как JPG, BMP и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...