Paint.NET v3.30 Beta 1 is now available

Alright, here we go: finally a new update to Paint.NET! Please note that this is a beta, and expires in 60 days on April 28th. You can get this update by downloading it from the website, (no need to uninstall your current version, it will figure it all out for you), or via the built-in updater. For the latter, go to Help -> Check for Updates… and make sure you are set up to receive betas by clicking on the Options button and ensuring that "Also check for beta relases" is checked. Then close the dialogs and click on Help -> Check for Updates… again.

The most notable features in this release are the ability to save PNG’s at 8- and 24-bit depth, and the integration of Ed Harvey’s "Fragment" blur effect. There are also a bunch of other minor things, bug fixes, and a new Italian translation.

List of changes:

  • New: Ability to save PNG’s at 8- and 24-bit color depths.
  • New: Ability to save BMP’s at 8-bit color depth.
  • New: "Auto-detect" bit-depth option for PNG, BMP, and TGA file types. It will analyze the image and determine the lowest bit-depth that can still save the image without quality loss.
  • New: "Fragment" blur effect, by Ed Harvey
  • New: The "Polar Inversion" distortion effect has been enhanced to allow changing the rendering offset, and the behavior for "edge" pixels (clamp, reflect, or wrap).
  • New: For developers, IndirectUI can now be used to write configuration UI for file types.
  • New: For developers, IndirectUI has a new radio button control type for enumerations, and some new property constraint rules.
  • New: Italian translation.
  • Fixed: In some cases, an exponential property slider would get "stuck" at some values when using up/down keyboard keys. This mostly affects some effect plugins.
  • Fixed: When using keyboard navigation, sometimes the File menu would scroll its items out of view.
  • Fixed: Some crashes that were tracked down to out-of-bounds coordinate values in certain effects.
  • Fixed: The installer would fail if Paint.NET had never been installed before, and was being installed to any non-default directory. This bug only affected version 3.22.



Paint.NET learns Italian!

There’s one more feature, so to speak, that’s been able to sneak in to the v3.30 release. From the blog title it should be obvious: Paint.NET will soon be available in Italian!

I get a lot of e-mails asking for this, and now thanks to the hard working folks in Microsoft Developer Division ("DevDiv"), it will now be available. (DevDiv also handles the other 7 non-English translations)

"Just Add More Cowbell"

As an owner of a software project, one trap that’s easy to fall into is that of adding more and more features. Quite often these features do in fact add value, but there’s a certain point where adding features ends up being superfluous and actually has a negative impact. At that point, adding more features is akin to "more cowbell," as made famous by the Saturday Night Live skit with Christopher Walken and Will Ferrel. When it comes to deciding on the feature set for a new release, you should ask yourself: "Is this feature necessary? Or is it just more cowbell?"

With Paint.NET, I believe that I have, for the most part, avoided the trap of "more cowbell." However, it’s becoming more difficult. It is very easy for me to add new effects and adjustments and to then put out a new release which results in a spike of downloads, media attention, popularity, and of course … cash. Never underestimate the power that cash can have on the owner of a software project. If there’s no cash involved at all, then progress is slow and at one’s leisure. Too much cash and it becomes easy to fall into the trap of putting out "cowbell releases" because they’re easy. They make money. Apathy can then set in because, hey, rich people don’t have to care, right?

The work that needs to be done for Paint.NET v4.0 is, honestly, quite enormous and even intimidating. And while I’m working on it I need to have at least a trickle of releases using the v3.xx code base in order to keep public attention alive, and also to keep the money coming in. But, I don’t want to make any major changes in the v3.xx design or architecture because then that adds more stuff I have to rewrite or integrate in to v4.0. So, the natural thing to do is to add more effects or adjustments — because of the way these all use the same underlying hosting and execution system, I can literally add tons of these without adding extra work to v4.0.

However, doing this immediately puts Paint.NET into "cowbell territory". I was just thinking about the feature set I’ve made for v3.30, and I’m realizing that it’s teetering on the edge of this. The ability to save in new bit-depths with PNG is useful, but I’m also adding a big group of new effects that, honestly, I’m realizing mostly serve to make the release appear more feature-laden. In fact, I don’t think Vignette and Posterize are really that important, and so I think I’m going to cut them from this release. If you want them then you can download them in Ed Harvey’s plug-in pack from the forum.

So, as 2008 continues to progress, I’m still trying to figure out how best I can get more time to work on v4.0, while continuing a trickle of v3.xx updates, while also minimizing my engineering investment in it, while also avoiding turning those updates into "cowbell releases." One way that you can help is to point out when or if you think you see "cowbell" in Paint.NET!

Paint.NET v3.30 Preview

It’s time once again to start babbling about the next minor update to Paint.NET, which will be version 3.30. I’m planning to push it out the door in early April. Here’s what’s coming:

  • Integration of Ed Harvey’s Fragment, Vignette, and Posterize effects.
  • An enhanced version of the Polar Inversion effect, also written by Ed Harvey and originally included in his “Polar Inversion +” plugin.
  • PNG will now support saving in 8-bit and 24-bit. There is also an “auto-detect” option where Paint.NET will analyze the image and auto-select the lowest bit-depth that can save the image losslessly.
  • BMP will now support saving in 8-bit. It will also have the “auto-detect” option, but there is still no 32-bit BMP support. GDI+ just refuses to cooperate in allowing me to do that.
  • TGA will also support the “auto-detect” option, for its 24-bit and 32-bit support.
  • For developers, IndirectUI is now available for writing UI for file type codecs. There are also some extra property rules you can use, such as the ability to link values based on a checkbox (useful for linking R,G,B sliders for instance).
  • The usual round of bug fixes, including some memory corruption bugs I found after noticing that some effects were trying to access coordinates that couldn’t possibly exist. “NaN” is not a valid coordinate 🙂

After v3.30, I am planning two small updates after that: v3.32, and v3.34. These should include the usual round of bug fixes (there is always something to fix, even if it’s minor!), but also Ed Harvey’s “Surface Blur” and “Dents” effects. I will probably release v3.32 from 6 to 8 weeks after v3.30, and then v3.34 at 6 to 8 weeks after that. Hopefully this will give me a good chunk of time to devote to working on v4.0!

Another Dumb Way to Start a Business Proposal

They just keep coming in.

Subject: re: advertising proposal


I am a media buyer at Medios One LLC (  I am interested in buying inventory on your site.  MediosOne is a global online advertising network.  We have offices in 5 countries and many more support offices around the world.  Our publisher network model gives us access to large amounts of high  quality inventory from all types of sites, which are targeted to users in many geographic locations. Some of the advertisers we work with include ICICI, Make My Trip, Max New York Life,, Colgate, Hewlett Packard, Tata Sky, AOL, Citibank, and  India Times. We are  currently looking for publishers to add to our network. Currently, we are running a good  amount of campaigns targeted to the US, Asia, South America, UK as well as Western Europe.

Can you help me reach the appropriate person who handles advertising sales for your website?

If you are the correct person please let me know and we can move forward, if not would you please direct me to that person in your company.

I look forward to your response and the possibility of our companies doing business together.

Thank you,
Jobette Escobanas
contact information removed

This e-mail was actually relatively well written, and polite. They get points for that, as well as for targeting the global market and not just being limited to English and the good ol’ U.S.A. To nitpick his e-mail, he states his company’s name different ways: is it MediosOne, or Medios One? Also, why would I want Colgate ads on my website?

Maybe I’m old fashioned, but I think that details really do count on an e-mail like this. It’s obviously a copy-pasted e-mail with no mention of my name, my company’s name, my product’s name, the website address, or anything that tells me that the e-mail was targeted at me and not just blindly multicast to hundreds of other e-mails. To be honest, I’m at the point where any business deal I set up must be five figures per month and that’s not something I’m going to trust with just any drive-by e-mail with random spacing anomalies and other inconsitencies.

Also, Jobette has made an enormous faux paus in my book: He started the subject line with ‘re:’. Why did he do that? Does he think he has to trick me in to reading his e-mail by making me think this is part of an existing conversation thread? I don’t get it. Maybe it was a mistake, who knows. In any event, no thanks Jobette … but best of luck though I suppose.

Lastly, I apologize for not blogging much lately. I’ve been busy with work, social life, and of course Paint.NET work. And Rock Band. I’ve made enhancements to the PNG, BMP, and TGA codecs that have come with some refactoring work, as well as having extended IndirectUI to work with file type codecs/plugins. We were also tracking down a bizarre enumeration related bugs with the .NET runtime … I seriously thought my computer was failing and I”d have to buy new RAM, but then tracked it down to a smashed stack. Interesting stuff.