2012-03-16 3 views
2

current exampleНапиши текст на изображение (указанная ширина)

Я генерирую Ярды для сотрудников. Мне нужно написать адрес сотрудника на ICard.

  Image blankICard = Image.FromFile(@"C:\Users\admin\Pictures\filename.jpg"); 

      Bitmap outputImage = new Bitmap(blankICard.Width, blankICard.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
      System.Drawing.SolidBrush b = new SolidBrush(Color.FromArgb(255, 88, 89, 91)); 
      using (Graphics graphics = Graphics.FromImage(outputImage)) 
      { 
       graphics.DrawImage(blankICard, new Rectangle(0, 0, blankICard.Width, blankICard.Height), 
       new Rectangle(new Point(), blankICard.Size), GraphicsUnit.Pixel); 

       Font stringFont = new Font("FreightSans Medium", 20, FontStyle.Regular); 

       string address = "Address goes here"; 

       graphics.DrawString(address, new Font("FreightSans Medium", 20, FontStyle.Regular), b, new Point(621, 234)); 
       graphics.DrawString("Employee Code:12345678", new Font("FreightSans Medium", 26, FontStyle.Regular), b, new Point(350, 407)); 
      } 

Токовый выход показан в левой части изображения. Здесь происходит то, что моя строка выходит из коробки.

Я хочу связать его в поле размера исправления.

Пример показан в правой части изображения.

+0

использует это перегрузка шнурка: http://msdn.microsoft.com/en-us/library/21kdfbzs.aspx – Rotem

ответ

3

Использование Graphics.DrawString перегрузки, которая принимает Rectangle вместо точки. Таким образом, вы будете обтекать текст в соответствии с указанной шириной.

using (Graphics graphics = Graphics.FromImage(outputImage)){ 
    // Draw whatever you need first 
    // .... 
    // Create font... 
    graphics.DrawString(employeeCode, font, Brushes.Black, 
         new Rectangle(0, 25, maxWidth, maxHeight); 
} 

просто :)

2

Я сделал некоторые изменения в код, комментируя 2 строки - у меня не было файла C:\Users\admin\Pictures\filename.jpg на моем компьютере - Вот почему blankICard был отключен и так был его Rectangle:

Вы должны установить maxWidth для того, чтобы обернуть например, код вашего сотрудника.

 // Image blankICard = Image.FromFile(@"C:\Users\admin\Pictures\filename.jpg"); 
     int width = 500; 
     int height = 500; 

     Bitmap outputImage = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     System.Drawing.SolidBrush b = new SolidBrush(Color.FromArgb(255, 88, 89, 91)); 
     SolidBrush blackBrush = new SolidBrush(Color.Black); 
     using (Graphics graphics = Graphics.FromImage(outputImage)) 
     { 
      graphics.DrawRectangle(new Pen(blackBrush) ,new Rectangle(0, 0, width, height)); 

    // new Rectangle(new Point(), blankICard.Size), GraphicsUnit.Pixel); 

      Font stringFont = new Font("FreightSans Medium", 20, FontStyle.Regular); 


      string address = "Address goes here"; 

      string employeeCode = "Employee Code:12345678"; 
      int maxWidth = 30; 
      SizeF sf = graphics.MeasureString(employeeCode, 
          new Font(new FontFamily("FreightSans Medium"), 26), maxWidth); 

      graphics.DrawString(address, new Font("FreightSans Medium", 20, FontStyle.Regular), b, new Point(0, 0)); 

      graphics.DrawString(employeeCode, 
          new Font(new FontFamily("FreightSans Medium"), 26), Brushes.Black, 
          new RectangleF(new PointF(0, 25), sf), 
          StringFormat.GenericTypographic); 




      //graphics.DrawString(, new Font("FreightSans Medium", 26, FontStyle.Regular), b, new Point(10, 20)); 
     } 
+0

Ширина работает fine..but остальных данных было отброшено, я хочу, чтобы данные (остальная часть данных) приходили в нижнюю строку. –

+0

Извините, о каких данных вы говорите? В примере я установил maxWidth как 30, но если вы увеличите, вероятно, вы найдете остальную часть строки. PS: Я не мог протестировать с FreightSans, потому что у меня не было этого шрифта на моем ПК. Я тестировал ARIAL. – ClayKaboom