2013-07-24 52 views
1

創建條碼這是我的代碼來創建條碼圖像:從字體免費3 9

class Program 
    { 
     static void Main(string[] args) 
     { 
      CreateBarcode("The quick brown fox jumps over the lazy dog".ToUpper()); 

     } 

     private static void CreateBarcode(string code) 
     { 
      var myBitmap = new Bitmap(500, 50); 
      var g = Graphics.FromImage(myBitmap); 
      var jgpEncoder = GetEncoder(ImageFormat.Jpeg); 

      g.Clear(Color.White); 

      var strFormat = new StringFormat { Alignment = StringAlignment.Center }; 
      g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat); 

      var myEncoder = Encoder.Quality; 
      var myEncoderParameters = new EncoderParameters(1); 

      var myEncoderParameter = new EncoderParameter(myEncoder, 100L); 
      myEncoderParameters.Param[0] = myEncoderParameter; 
      //MemoryStream memoryStrem = new 
      myBitmap.Save(@"d:\Barcode.jpg", jgpEncoder, myEncoderParameters); 
     } 

     private static ImageCodecInfo GetEncoder(ImageFormat format) 
     { 
      var codecs = ImageCodecInfo.GetImageDecoders(); 

      foreach (var codec in codecs) 
      { 
       if (codec.FormatID == format.Guid) 
       { 
        return codec; 
       } 
      } 
      return null; 
     } 

    } 

這正常不過,這條線:g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat);

,你可以在這裏看到的寬度爲500。現在,如果我指定了一大段文字,我擔心500只是不夠的。有什麼方法可以根據內容使這個寬度動態變化嗎?

+3

'g.MeasureString()'或者類似的東西就足夠了嗎? – dialer

+0

很酷,但我該如何改變這條線? var myBitmap = new Bitmap(500,50);這裏的位圖是500 * 50。這不應該是動態的嗎? – Jack

回答

0

它太老,不能回答,我仍在發帖,因爲它可能有助於某人。我們可以用一個虛擬位圖創建圖形對象,然後嘗試查找字體長度,然後重新初始化位圖以及圖形對象。

var myBitmap = new Bitmap(1, 1); 
Font threeOfNine = new Font("Free 3 of 9", 60, FontStyle.Regular, GraphicsUnit.Point); 
var g = Graphics.FromImage(myBitmap); 
SizeF dataSize = g.MeasureString(code, threeOfNine); 
myBitmap = new Bitmap(myBitmap, dataSize.ToSize()); 
g = Graphics.FromImage(myBitmap);