2015-05-04 2 views
3

Я сделал приложение, которое генерирует мне QR-код в PNG-изображении и распечатывает текст с QR-изображения, но теперь мне нужно повернуть этот текст на 90 градусов, и я могу 't найти способ сделать это ... Я думаю, что прямоугольник должен быть повернут, потому что текст находится внутри этого прямоугольника.Как повернуть текст в прямоугольной форме C#

Пример: enter image description here

Код:

namespace QR_Code_with_WFA 
{ 
    public void CreateQRImage(string inputData) 
    { 
     if (inputData.Trim() == String.Empty) 
     { 
      System.Windows.Forms.MessageBox.Show("Data must not be empty."); 
     } 

     BarcodeWriter qrcoder = new ZXing.BarcodeWriter 
     { 
      Format = BarcodeFormat.QR_CODE, 
      Options = new ZXing.QrCode.QrCodeEncodingOptions 
      { 
       ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H, 
       Height = 250, 
       Width = 250 
      } 
     }; 

     string tempFileName = System.IO.Path.GetTempPath() + inputData + ".png"; 

     Image image; 
     String data = inputData; 
     var result = qrcoder.Write(inputData); 
     image = new Bitmap(result); 
     image.Save(tempFileName); 

     System.Diagnostics.Process.Start(tempFileName); 

    var result2 = qrcoder.Write(inputData); 

    int textWidth = 200, textHeight = 20; 
    // creating new bitmap having imcreased width 
    var img = new Bitmap(result2.Width + textWidth, result2.Height); 

    using (var g = Graphics.FromImage(img)) 
    using (var font = new Font(FontFamily.GenericMonospace, 12)) 
    using (var brush = new SolidBrush(Color.Black)) 
    using (var bgBrush = new SolidBrush(Color.White)) 
    using (var format = new StringFormat() { Alignment = StringAlignment.Near }) 
    { 
      // filling background with white color 
      g.FillRectangle(bgBrush, 0, 0, img.Width, img.Height); 
      // drawing your generated image over new one 
      g.DrawImage(result, new Point(0,0)); 
      // drawing text 
      g.DrawString(inputData, font, brush, result2.Width, (result2.Height - textHeight)/2, format); 
    } 

    img.Save(tempFileName); 
    } 
} 

ответ

2

Вы должны применить RotateTransform на Graphics объекта перед нанесением текста:

// Change alignment to center so you don't have to do the math yourself :) 
using (var format = new StringFormat() { Alignment = StringAlignment.Center }) 
{ 
    ... 
    // Translate to the point where you want the text 
    g.TranslateTransform(result2.Width, result2.Height/2); 
    // Rotation happens around that point 
    g.RotateTransform(-90); 
    // Note that we draw on [0, 0] because we translated our coordinates already 
    g.DrawString(inputData, font, brush, 0, 0, format); 
    // When done, reset the transform 
    g.ResetTransform(); 
} 
+0

Если я использую этот текст исчезнет – Valip

+0

Это потому, что вы также должны использовать 'Graphics.TranslateTransform', в противном случае вы вращаясь вокруг [0 , 0], и поэтому ваш текст больше не отображается. Обновлен мой ответ. –

+1

Большое спасибо! – Valip

Смежные вопросы