title: Sizing image to text in the image with C# System.Drawing / Drawstring
body: <p>I want to take a string, and a specified font, and create a graphic image that contains that text in box, where the box resizes to the text.  </p>
  
  <p>I got the code below working, but it sizes the box before doing anything else. 
  Is there some way to resize the image to fit the text (I probably need to add a small border of a few pixels).  </p>
  
  <p>Also, I wasn't really sure why I need to pass the x,y coordinates if I want the string centered.  </p>
  
  <pre><code>  //Sample calls to function below 
          renderImage("Hello World", "Arial", 12, "test12.png");
          renderImage("Hello", "Arial", 16, "test16.png");
          renderImage("Peace Out", "Arial", 24, "test24.png");
  
  
  static void renderImage(string text, string fontName, string filename, int fontsize) 
  {
  
      {
          System.Drawing.Bitmap objBMP = null;
          System.Drawing.Graphics objGraphics = null;
          System.Drawing.Font objFont = null;
  
          // Create new image - bitmap
          objBMP = new Bitmap(531, 90);
  
          // Create a graphics object to work with from the BMP
          objGraphics = System.Drawing.Graphics.FromImage(objBMP);
  
          // Fill the image with background color
          objGraphics.Clear(Color.Yellow);
  
          // Set anti-aliasing for text to make it better looking
          objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
  
          // Configure font to use for text
          objFont = new Font(fontName, fontsize, FontStyle.Bold);
  
          // Try StringFormat 
          StringFormat objStringFormat = new StringFormat();
          objStringFormat.Alignment = StringAlignment.Center;
          objStringFormat.LineAlignment = StringAlignment.Center;
  
  
          // Write out the text
          objGraphics.DrawString(text, objFont, Brushes.Black, 1, 1, objStringFormat);
  
  
    // Set the content type and return the image
          objBMP.Save(filename, ImageFormat.Png);
  
      }
  </code></pre>
  
  <p>UPDATE: </p>
  
  <p>Got it working based on answer, but is there a more efficient way: </p>
  
  <pre><code>static void Main(string[] args)
  {
      renderImage("Hello World", "Arial", 12, "test12.png");
      renderImage("Hello", "Arial", 16, "test16.png");
      renderImage("Peace Out", "Arial", 24, "test24.png");
  }
  
  static void renderImage(string text, string fontName, int fontSize, string filename) 
  {
  
      {
          System.Drawing.Bitmap objBMP = null;
          System.Drawing.Graphics objGraphics = null;
          System.Drawing.Bitmap objBMPTemp = null;
          System.Drawing.Graphics objGraphicsTemp = null;
          System.Drawing.Font objFont = null;
  
          // Configure font to use for text
          objFont = new Font(fontName, fontSize, FontStyle.Bold);
  
          // Create new image - bitmap
          SizeF objSizeF = new SizeF();
          objBMPTemp = new Bitmap(100, 100); // some temp dummy size 
  
          // Create a graphics object to work with from the BMP
          objGraphicsTemp = System.Drawing.Graphics.FromImage(objBMPTemp);
  
          objSizeF = objGraphicsTemp.MeasureString(text, objFont);
          objBMP = new Bitmap((int)objSizeF.Width, (int)objSizeF.Height); 
          objGraphics = System.Drawing.Graphics.FromImage(objBMP); 
  
  
  
          // Fill the image with background color
          objGraphics.Clear(Color.Yellow);
  
          // Set anti-aliasing for text to make it better looking
          objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
  
  
          // Try StringFormat 
          //StringFormat objStringFormat = new StringFormat();
          //objStringFormat.Alignment = StringAlignment.Center;
          //objStringFormat.LineAlignment = StringAlignment.Center;
          //objStringFormat.FormatFlags
  
  
  
          // Write out the text
          //objGraphics.DrawRectangle(new Pen(Color.Cyan, 1), 0.0F, 0.0F, objSizeF.Width, objSizeF.Height);
          objGraphics.DrawString(text, objFont, Brushes.Black, 1, 1);
          //objGraphics.DrawString(text, objFont, Brushes.Black, 
  
  
  
          // Set the content type and return the image
          objBMP.Save(filename, ImageFormat.Png);
  
  
          // Kill our objects
          objFont.Dispose();
          objGraphics.Dispose();
          objBMP.Dispose();
      }
  
  }
  </code></pre>