owenblacker (owenblacker) wrote,

  • Location:
  • Mood:


I'm getting very frustrated with trying to generate text on images in .Net. Whilst the process to do so is pretty simple, the results one gets simply aren't that satisfactory.

I have the following code (really very simple, as you can see) in an IHttpHandler, which I call in a loop to iterate through some of the fonts on my system as a proof-of-concept:

/// <summary> Enables processing of HTTP Web requests. </summary> /// <param name="context"> /// An <see cref="T:System.Web.HttpContext"/> object that provides references to the /// intrinsic server objects (for example, Request, Response, Session, and Server) /// used to service HTTP requests. /// </param> /// <remarks> /// Looks for a <see cref="HttpRequest.QueryString"/> item named <c>font</c> and /// renders a 100×30px image of that font name, in that font. /// </remarks> /// <exception cref="ArgumentNullException"> /// No querystring element <c>font</c> was found. /// </exception>
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/png"; string fontName = context.Request.QueryString["font"]; Image img = new Bitmap(Width, Height); using (Graphics graphic = Graphics.FromImage(img)) { graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; graphic.DrawString( fontName, new Font(fontName, FontSize), new SolidBrush(Color.Black), new PointF(0, 0) ); } img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); }

So far so good. It does almost exactly what I'd expect it to. But the images it generates are, frankly, shit. The following image is a screengrab of me running this locally (in Google Chrome, not that that matters), with the images on the left and the font name on the right (using CSS to cause it to be in the same size and font as the image):

Screengrab of results

So why is GDI+ generating the text bolder (darker) than it should be. I understand that it won't necessarily be as beautiful as the ClearType-rendered text, but the weight of the font is just damn wrong!

So how do I get GDI+ to play ball? Anyone?

If you don't want to leave thoughts as a comment on here, feel free to email me (owen dot blacker at iris hyphen digital dot com). Cross-posted to csharp and ms_dot_net.

Tags: dotnet, system.drawing, tech

  • OpenTech 2010

    This weekend, I spent the day at OpenTech 2010, with several friends, enjoying a day of interesting and thought-provoking geek talks (only slightly…

  • (no subject)

    Ada Lovelace Day is 24 March, to celebrate the achievements of women in technology. Go sign the pledge and start thinking about who to blog…

  • Damn US entertainment industry


  • Post a new comment


    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded