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>
Image img = new Bitmap( , );
using (Graphics graphic = Graphics.FromImage(img))
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
new Font(fontName, ),
new PointF(0, 0)
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):
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?Advertisements