owenblacker (owenblacker) wrote in csharp,
owenblacker
owenblacker
csharp

  • Location:
  • Mood:

Graphics.DrawString

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 owenblacker and ms_dot_net.

  • Post a new comment

    Error

    default userpic
  • 1 comment