More on Multicore JIT

Last month I posted about how you can use Multicore JIT, a .NET 4.5 feature, even if your app is compiled for .NET 4.0. It’s a great feature which can help your app’s startup performance with very little code change: it’s essentially free. In some cases (e.g. ASP.NET) it’s enabled automatically.

But wait, there’s more!

Over on the .NET Framework Blog, Dan Taylor has posted a really good write-up about Multicore JIT with graphs showing the performance improvements when it’s applied to Paint.NET 4.0, Windows Performance Analyzer, and Windows Assessment Console. I was involved in the code changes for each of these (obviously for Paint.NET), which leads into the next link …

We also did a video interview with Vance Morrison (Performance Architect on .NET) which is now posted over at Channel 9:

The Paint Bucket in 4.0 (video)

This video showcases some of the things I can do with the new rendering engine and tool transaction system in 4.0. Even the Paint Bucket tool can get awesome “WYSIWIGEWYEI” (What You See Is What You Get … Especially While You’re Editing It, which needs a better name) and Fine-Grained History (you can undo/redo every change, not just those that commit pixels to the layer).

One big annoyance of the Paint Bucket tool in every imaging app out there is that it doesn’t do a good job of letting you explore and be creative. There are two primary “inputs” for it: the origin point (where you clicked), and the tolerance setting. Where you click determines the point at which the flood fill algorithm is executed from, and which color is used as the basis for comparing to other colors to see if they are at a “distance” (Euclidean) that is less than the tolerance value. Colors that are at a distance less than the tolerance are filled in with whatever color or pattern you specify. Black and white are as far apart as possible and require a high tolerance value to “notice” each other, while shades of the same color are computed as relatively close to each other and will be included with lower tolerance values.

What happens in most imaging apps* is that you click somewhere with the Paint Bucket tool, look at the result, and decide that either you wish you’d clicked somewhere else or used another tolerance value. On a rare occasion, it looks perfect and you’re done.

Then you click undo.

Next, you click somewhere else, possibly after editing the tolerance in the toolbar. Then you realize it’s not exactly what you want, so …

Then you click undo. And repeat. And repeat, and repeat, and repeat.

In 4.0 I’m working to finally get rid of that repetition, which is work I started with the new Gradient tool I added back in 3.0 (2006!). Once you click somewhere with the Paint Bucket tool, you can go edit the tolerance in the toolbar which essentially causes your click action to be re-executed. You can also move your mouse down into the canvas where you clicked, and drag around a handle which will move the origin point. You can change the color, or anything else that affects how the fill is rendered. You can use the undo and redo commands to walk through every adjustment that you’re trying out.

This is a very powerful addition to the tools in which really enables you to quickly explore the creative landscape in a way that no other image editing software can. It also lets you gain an intuitive understanding of settings that do not necessarily lend themselves to short, intuitive descriptions (like tolerance!), but which are easily learned through interactive exploration. This video was recorded a few weeks ago. Since then I’ve added antialiasing as well as the ability to choose between sampling the current layer or the whole image, and have also made other performance improvements. (I’ve also removed the “old” Paint Bucket tool, which is why you see the “new” version of it sitting at the bottom of the Tools window in the video.)

This is my first video posting, we’ll see how it goes! I didn’t think I could properly discuss this feature with just words and pictures.

* every one that I know of, but I used the word “most” just in case I’m wrong Winking smile