Our PDF rasterizer engine uses GDI+ for rendering. In this way rendering to a printer is no different than rendering to the screen, and we do not have to bother with low level concepts like resolutions. In any case, we really do not like the idea of sending bitmaps to our high resolution color printer. It is 2011 you know.

Along the way however, we discovered that GDI+ does not quite cut it. It has all sorts of quirks and limitations, and it lacks some features that PDF has. So, we spent some of our time inventing GDI+ workarounds.

One area that has been particularly painful is the complete lack of blend modes in GDI+. Up to a point we have been able to approximate the blend modes using normal transparency. This works surprisingly well for many files. There are however some effects that no form of ordinary transparency will ever be able to approximate.

In GDI+, the only real solution for this appears to be to render both the foreground and the background as a bitmap and do the blending ourselves, pixel for pixel. So why have we not done this already? The problem is not so much the blending operations. These are trivial. The problem is: keeping (printing) quality without generating huge bitmaps that slow down printing to a crawl. So here we are: we have PCL6 and PostScript 3, and the only way to get these pages on our high resolution color printer is basically by avoiding these high level printer languages entirely…. Pfff.

So, we started telling ourselves: GDI+ is old. Microsoft is bound to come up with an improved, modern successor. We decided to wait a bit, hoping to avoid complaints. And then WPF arrived at the end of 2006. Hurray!

Wait… no Blend modes yet, despite a product called Expression Blend. We waited a bit more.

I have been told that blend modes are difficult to implement in WPF because of the retained graphical system that WPF employs. I find that hard to believe. If that were true WPF would basically be broken. And supporting blend modes is no more difficult than supporting transparency. The pixels just need to be combined with their backdrop in a slightly different manner. WPF has plenty support for ordinary transparency. As I see it, this would be a tiny technical step for Microsoft.

In the meantime, Microsoft has started telling us not to rely on GDI+ anymore for ASP.NET services and it is ‘gently’ pushing us towards WPF. See http://msdn.microsoft.com/en-us/library/system.drawing.aspx.

It is now halfway 2011 and WPF still has no Blend Mode support. How is this system (and XPS) ever going to be a serious competitor of PDF in terms of high-end graphical rendering? I understand that 3D rendering is also important, but seriously Microsoft: the last time I looked at your gaming platform – albeit increasingly popular – it was not more profitable than your office division.

So come on Microsoft, if you can make an XBox, you can also build a Blender!