paint.net 4.2 is now available!

This is a big update that focus on adding HEIC file format support, fixing performance with very large images, and upgrading and modernizing the functionality of many existing file types (JPEG, PNG, BMP, GIF, and TIFF). Many other quality of life issues have also been addressed or fixed.

If you’re using the Windows Store release, you should get the update automatically within the next 24 hours. You can also force an update check by following these instructions.

For the Classic release, you should be offered the update automatically within the next week or so. You can get the updater soon by going to ⚙ Settings → Updates → Check Now. You can also download and install it directly from the website.

It’s important to note that HEIC file format support requires two things: 1) you must be using Windows 10 v1809 or newer, and 2) you must install Microsoft’s HEVC Video Extensions from the Microsoft Store which costs $1. This is necessary due to HEVC being mired in licensing and patent royalty costs. If you want to find some HEIC images, look no further than your recent iPhone (7 or newer). Many newer Android devices also support it.

Most of the other built-in file types — BMP, GIF, PNG, JPEG, and TIFF — have been internally upgraded from using GDI+ to being built on top of WIC (Windows Imaging Component). BMP can now save 32-bit images with alpha transparency, while JPEG and PNG can now load and save much larger images, and TIFF now supports saving at 24-bit and 8-bit color depths ("Auto" is also now included).

On the performance side, I’ve rebuilt the data structures inside of the rendering engine that are used for keeping track of invalidation regions. These hold information about what parts of the image need to be rendered and then redrawn on the screen, either because the image has been changed (like with drawings or effects) or because of scrolling and zooming. In previous versions you couldn’t really work with very large images, starting around 32,000 x 32,000 pixels. Zooming in and out would result in a lot of slow performance, lag, and even complete hangs of the app for seconds — or more (at 60,000 pixels it could hang for 30-60 seconds or more!). Now this should all be completely fluid

Please note that a previous beta, 4.2 build 7121, included functionality that would automatically apply an image’s embedded color profile, thus converting the image to the sRGB color space and "fixing" its colors. The complexity of color management was much higher than expected, and thus it has been removed for now. It may come back in a future update but in a more substantial form. Check out Jeffrey Friedl’s excellent Digital-Image Color Spaces article for a good read on this subject.

Here is the complete list of changes since the 4.1.6 release:

  • New: Support for loading and saving HEIC images (Windows 10 v1809+ and codec installation is required). Please note that the "Quality" slider when saving is limited to a value of 90 (out of 100) while Microsoft investigates and fixes a crash in their codec.
  • New: Keyboard shortcuts for changing the current layer. You can see these in the Layers menu with the "Go to …" commands. Alt+PgUp/PgDown will go to the layer above/below, and Ctrl+Alt+PgUp/PgDown will go to the top/bottom layer.

  • Fixed: Optimized rendering engine to remove huge lag spikes (30+ seconds) when zooming or panning very large images (e.g. 32K x 32K pixels).
  • Improved: BMP now supports saving in 32-bit (with alpha!) and 8-bit indexed.

  • Improved: Added DIB and RLE file extensions to the BMP file type.

  • Improved: PNG, JPEG, and TIFF now support loading and saving of much larger images.
  • New: PNGs can now be saved as "interlaced".

  • Improved: JPEG now has configuration for the chroma subsampling mode (4:4:4, 4:2:2, and 4:2:0). The default is now 4:2:2 instead of the unconfigurable 4:2:0 of older versions. This may result in larger file sizes, but higher quality, as compared to previous versions.
  • Improved: TIFF now supports saving at 24-bit and 8-bit color depths.
  • Improved performance of saving for file types where "Auto" bit-depth is supported but is not the current choice.
  • Improved temporary memory usage when saving images at 8-bit color depth.
  • Improved: TGA images now load about 4x faster (thanks @null54!)
  • Fixed: 8-bit TGA images should now load correctly (thanks @null54 for the fix!)
  • Fixed: Some 32-bit TGA images were showing up as completely transparent due to their use of an obscure alpha channel type (thanks @null54 for the fix!)
  • Improved: Added error reporting to the Save Configuration dialog. Instead of just saying "Preview: (error)", you’ll also get the standard error dialog that includes the exception which can used for troubleshooting.

  • Fixed a number of performance issues in the Save Configuration dialog. Especially with large images, it should now be much faster to change options and to click OK/Cancel.
  • Fixed flickering in the Save Configuration dialog when changing options.
  • Fixed: Windows Explorer thumbnails for some image types (PDN, DDS, TGA) were not rendering their alpha (transparency) correctly, resulting in color skew. You may not see the effect of this fix for a particular image until that image is resaved or you clear Explorer’s thumbnail cache.
  • Fixed: Mouse cursors now scale appropriately for non-integer UI scales (e.g. 125% or 175%)

  • Fixed: AltGr should now work correctly with the Text tool. It will not trigger shortcuts like File -> Save All, or Edit -> Paste into New Image. (thanks @Bruce Bowyer-Smyth for the fix!)

  • Changed: Image->Resize supports Super Sampling again, and favors this over Fant when using Best Quality. Fant is still available, but is no longer chosen automatically.

  • Changed: Holding Ctrl when starting to move a selection with the Move Selected Pixels tool will no longer leave behind a copy of the selected area

  • Fixed: Bicubic resampling in the Move Selected Pixels tool was not correctly handling the alpha channel in some cases. This fix has required a reduction in performance.
  • Improved: When using Edit->Copy, a 32-bit BGRA bitmap in the DIBV5 format is now placed onto the clipboard so that other apps can read the alpha channel.

  • Improved: When using Edit->Paste, DIBV5’s are now supported if they have an alpha channel. If they don’t, then the regular DIB loader is used which has some heuristics for detecting an incorrectly defined alpha channel and correcting for it.

  • Improved: When using Edit->Paste, PNG is now the highest priority format. This maximizes the ability to maintain alpha/transparency, but it does mean that images coming from Microsoft Office apps will appear larger than they used to. This is either a bug or a feature of Microsoft Office. For some reason it places PNGs on the clipboard that are 25%+ larger than the DIB/DIBV5 bitmap that it also places on the clipboard (but which don’t have alpha/transparency).

  • Fixed: DIBV5 bitmaps should now work with Edit->Paste, which improves alpha channel handling. (thanks @null54 for the fix!)
  • Fixed: Top-down DIBs should now work correctly with Edit->Paste. (thanks @null54 for the fix!)
  • Improved CPU usage for thumbnail updates (layers and image tabs) in many cases.
  • Improved: Slightly increased the size of the Settings dialog to reduce the need for scrolling in a few important situations
  • Fixed: Simple message boxes can now be closed with the ESC key
  • Fixed: Magic Wand now works on very large images (e.g. 65535 x 65535 pixels) without an error.
  • New: Plugins that use IndirectUI can now use a UriProperty with a LinkLabel control (thanks @null54!)
  • New: Effect plugins can now more easily make use of the clipboard via the IClipboardService. It will handle all of the tricky clipboard issues such as threading, native data marshaling, and avoiding security vulnerabilities that exist in the standard WinForms and WPF clipboard APIs.

  • New: FileType plugins can now specify separate lists of extensions for loading and saving.

  • Blocked the WebP FileType v1.1.0.0 plugin due to instability. An update is already available.
  • Blocked the ImAgif FileType v0.12.0.1084 plugin due to incompatibility. An update will hopefully soon be available.

Advertisements

paint.net 4.2 beta build 7121 is now available

This should be the last beta before the final release! There isn’t a lot that’s changed, which is a good thing. The most important thing to try out is the application of embedded color profiles. Previously, the color profile was loaded* and then included when saving the image*, but now it is loaded, applied to the image, and discarded (you don’t want to double apply the color profile!). You will probably see some JPEG or HEIC images that now load with more saturated (or possibly less saturated) colors; they will match the appearance you see in Explorer thumbnails and previews.

To get this update, make sure you have "Also check for pre-release (beta) versions" enabled in Settings, and then click on the Check Now button.

image.png

You can also download it directly by heading over to the forum.

Changes since 4.2 beta build 7116:

  • New: Embedded color profiles are now applied when loading images of supported file types (JPEG, PNG, HEIC, etc.). This is a one-time conversion to the sRGB color space that results in the color profile being discarded once it has been applied.
  • Fixed: The HEIC file type’s Quality slider is now limited to a maximum value of 90 while Microsoft fixes a heap corruption crash in the codec.
  • Fixed: The DIB and RLE extensions will now be registered for APPX (Store) installations
  • Fixed: Bicubic resampling in the Move Selected Pixels tool was not correctly handling alpha in some cases. This fix has required a reduction in performance.
  • Fixed: Explorer thumbnails for some image types (PDN, DDS, TGA) were not rendering their alpha correctly. You may not see the effect of this fix for a particular image until that image is resaved, or you clear Explorer’s thumbnail cache.

* for supported file types such as JPEG

paint.net 4.2 beta build 7111 is now available

No, you didn’t miss the 4.1.7 release, I’ve just decided to call this the 4.2 release Enough has change that I think it’s warranted! Since this is a beta, translations have now been updated.

To get this update, make sure you have "Also check for pre-release (beta) versions" enabled in Settings, and then click on the Check Now button.

You can also head over to the forum for a direct download link.

Here are all the changes since 4.1.6, with highlights to indicate what’s new since 4.1.7 alpha 7107:

  • New: Support for loading HEIF/HEIC images (Windows 10 v1809+ required). Saving is not yet supported.
  • New: Keyboard shortcuts for changing the current layer. You can see these in the Layers menu with the "Go to …" commands. Alt+PgUp/PgDown will go to the layer above/below, and Ctrl+Alt+PgUp/PgDown will go to the top/bottom layer.

  • New: PNGs can now be saved as "interlaced"

  • New: Plugins that use IndirectUI can now use a UriProperty with a LinkLabel control (thanks @null54!)

  • New: Effect plugins can now more easily make use of the clipboard via the IClipboardService. It will handle all of the tricky clipboard issues such as threading, native data marshaling, and avoiding security vulnerabilities that exist in the standard WinForms and WPF clipboard APIs.

  • New: FileType plugins can now specify separate lists of extensions for loading and saving

  • Changed: Image->Resize supports Super Sampling again, and favors this over Fant when using Best Quality. Fant is still available, but is no longer chosen automatically.

  • Changed: Holding Ctrl when starting to move a selection with the Move Selected Pixels tool will no longer leave behind a copy of the selected area

  • Improved: When using Edit->Copy, a 32-bit BGRA bitmap in the DIBV5 format is now placed onto the clipboard so that other apps can read the alpha channel.

  • Improved: When using Edit->Paste, DIBV5’s are now supported if they have an alpha channel. If they don’t, then the regular DIB loader is used which has some heuristics for detecting an incorrectly defined alpha channel and correcting for it.

  • Improved: When using Edit->Paste, PNG is now the highest priority format. This maximizes the ability to maintain alpha/transparency, but it does mean that images coming from Microsoft Office apps will appear larger than they used to. This is either a bug or a feature of Microsoft Office. For some reason it places PNGs on the clipboard that are 25%+ larger than the DIB/DIBV5 bitmap that it also places on the clipboard (but which don’t have alpha/transparency).

  • Improved: BMP now supports saving in 32-bit (with alpha!) and 8-bit indexed.

  • Improved: PNG and JPEG now supports loading and saving of much larger images.
  • Improved: JPEG now has configuration for subsampling mode (4:4:4, 4:2:2, and 4:2:0). The default is now 4:2:2 instead of the (unconfigurable) 4:2:0 of older versions.
  • Improved: TIFF now supports saving at 24- and 8-bit color depths.
  • Improved: TGA images now load about 4x faster (thanks @null54!)
  • Improved: Added error reporting to the Save Configuration dialog. Instead of just saying "Preview: (error)", you’ll also get the standard error dialog that includes the exception which can used for troubleshooting.

  • Improved CPU usage for thumbnail updates (layers and image tabs) in many cases.
  • Improved performance of saving for file types where "Auto" bit-depth is supported but not the current choice.
  • Improved temporary memory usage when saving images at 8-bit color depth.
  • Improved: Slightly increased the size of the Settings dialog to reduce the need for scrolling in a few important situations
  • Fixed: AltGr should now work correctly with the Text tool. It will not trigger shortcuts like File -> Save All, or Edit -> Paste into New Image. (thanks @Bruce Bowyer-Smyth for the fix!)
  • Fixed: Mouse cursors now scale appropriately for non-integer UI scales (e.g. 125% or 175%)
  • Fixed a number of performance issues in the Save Configuration dialog. Especially with large images, it should now be much faster to change options and to click OK/Cancel.
  • Fixed flickering in Save Configuration dialog when changing options.
  • Fixed: Optimized rendering engine to remove huge lag spikes (30+ seconds) when zooming or panning very large images (e.g. 32K x 32K pixels). 
  • Fixed: 8-bit TGA images should now load correctly (thanks @null54 for the fix!)

  • Fixed: Some 32-bit TGA images were showing up as completely transparent due to their use of an obscure alpha channel type (thanks @null54 for the fix!)

  • Fixed: Simple message boxes can now be closed with the ESC key

  • Fixed: Some TIFFs could not be resaved as a JPEG due to having too much metadata (usually from Adobe Photoshop). The metadata is now discarded if necessary.

  • Fixed: Magic Wand now works on very large images (e.g. 65535 x 65535 pixels) without an error.

  • Fixed: DIBV5 bitmaps should now work with Edit->Paste, which improves alpha channel handling. (thanks @null54 for the fix!)
  • Fixed: Top-down DIBs should now work correctly with Edit->Paste. (thanks @null54 for the fix!)
  • Blocked the WebP FileType v1.1.0.0 plugin due to instability. An update is already available.

  • Blocked the ImAgif FileType v0.12.0.1084 plugin due to incompatibility. An update will hopefully soon be available.

paint.net 4.1.7 alpha build 7077 is now available

To download, head on over to the forum. I’m also in the process of adding this to the auto-updater.

This build has two big things going for it: 1) fixes to the Save Configuration dialog (sorta), and 2) some absolutely massive performance fixes to the main rendering engine when working with very large images.

Save Configuration dialog: Some folks have reported that they can’t get the Preview to work, even though saving and loading works fine. I don’t have a fix for this yet (AFAIK), but at least you’ll be able to see what the actual error is now so that you can send it to me. It will show up in the standard error dialog along with the almost useless "Preview: (error)" text that displays at the top.

Rendering engine: Before this update, Paint.NET has been very bad about handling very large images. I’m talking images that are on the order of 32,000 pixels large on either dimension (width or height). Zooming and panning often result in very long delays where the app just hangs until it figures itself out — and we’re talking 30, maybe even 60, seconds, even with a $1000 CPU like an overclocked Intel Core i9-7900X. I spent the last week optimizing this and replacing the data structures and work queue management code, and now this should all be working good. It’s not 60 FPS, so there’s still some work left when the time comes for it, but it’s very usable now! The worst delays might be on the order of 100-200ms, so they just feel like kind of a choppy framerate sometimes.

Changes since the previous alpha (build 7070):

  • Fixed: Optimized rendering engine to remove huge lag spikes (30+ seconds) when zooming or panning very large images (e.g. 32K x 32K pixels).
  • Improved: Added error reporting to the Save Configuration dialog. Instead of just saying "Preview: (error)", you’ll also get the standard error dialog that includes the exception which can used for troubleshooting.

Enjoy! Smile

paint.net 4.1.7 alpha build 7070 is now available

Finally, a new build! :)

Edit: The title of this blog post originally incorrectly said build 7068. I’ve fixed it to say 7070. Everything else was correct. (The URL still has 7068 in it, oh well :))

To download, head over to the forum. (I’m also in the process of adding this to the auto-updater.)

I’ve spent a lot of time migrating all of the internal file types from GDI+ to WIC. This was a huge amount of code, but is a necessary infrastructure change for the long-term. GDI+ doesn’t work correctly to load “large” images, for instance — where “large” is actually any image that takes over 4GB of memory per layer (may even be limited to 2GB). There are a lot of other benefits, as well, such as having access to configure JPEG’s subsampling when saving.

Affected file types are PNG, JPEG, GIF, BMP, TIFF, and the newly added support for HEIF/HEIC (loading only, no saving). If you want to know where to get sample *.HEIC images, look no further than your iPhone :) https://www.softwarert.com/transfer-photos-iphone-to-computer-heic-jpg/ Many Android phones should have support, too, but you’ll have to look it up for your particular make/model.

tl;dr for “what is HEIF: same quality as JPEG for half the file size. (IIRC) And a bunch of other stuff.

If you’re a fan of BMP, for some reason :), you’ll be happy to know you can now save and load with alpha (transparency). When I originally looked into this (like a decade ago?) I concluded it wasn’t possible, but several years later I now find out that WIC supports this natively. So, now it’s gladly supported

Note that due to a bug in WIC’s PNG decoder, file sizes over 4GB cannot be loaded. See my tweet for more info. In fact, PNGs larger than 2GB only work because I discovered a hacky workaround. Microsoft is currently looking into this and may have a fix soon (or like in Win10 v19H2 or something).

I’ve also done a bunch of refactoring and fixing to the Save Configuration dialog. It should be faster, more responsive, and use less memory. The flickering is now gone when you’re changing options. “More responsive” means that it should now start working on the newest option changes immediately instead of waiting for the previous computation to finish up (this is called “cancellation support” btw). This also allows the OK/Cancel buttons to avoid a long “Canceling…” or “Finishing…” dialog in most cases. This is a huge improvement when working with large images, or with file types that are computationally expensive to save (e.g. 8-bits with dithering, or TGA, or even just modestly large PNGs).

Developer / plugin enthusiast notes: Please note that the aforementioned cancellation support does require the FileType to either be 1) actively reading/writing with the Stream it’s given, and/or 2) actively reporting progress through its ProgressEventHandler. If the FileType does a whole bunch of calculations and then dumps out to disk, and never reports progress, then it’s still possible that changing options or clicking OK/Cancel will be sluggish or take awhile. The internal FileTypes should do a good job here, but plugins may or may not.

Changes since 4.1.6:

  • New: Support for loading HEIF/HEIC images (Windows 10 v1809+ required). Saving is not yet supported.
  • Improved: BMP now supports saving in 32-bit (with alpha!) and 8-bit indexed.
  • Improved: PNG and JPEG now supports loading and saving of much larger images.
  • Improved: JPEG now has configuration for subsampling mode (4:4:4, 4:2:2, and 4:2:0). The default is now 4:2:2 instead of the (unconfigurable) 4:2:0 of older versions.
  • Improved: TIFF now supports saving at 24- and 8-bit color depths.
  • Changed: Image->Resize supports Super Sampling again, and favors this over Fant when using Best Quality. Fant is still available, but is no longer chosen automatically.
  • Fixed: AltGr should now work correctly with the Text tool. It will not trigger shortcuts like File -> Save All, or Edit -> Paste into New Image. (thanks @Bruce Bowyer-Smyth for the fix!)
  • Fixed: Mouse cursors now scale appropriately for non-integer UI scales (e.g. 125% or 175%)
  • Fixed a number of performance issues in the Save Configuration dialog. Especially with large images, it should now be much faster to change options and to click OK/Cancel.
  • Fixed flickering in Save Configuration dialog when changing options.
  • Improved CPU usage for thumbnail updates (layers and image tabs) in many cases.
  • Improved performance of saving for file types where “Auto” bit-depth is supported but not the current choice.
  • Improved temporary memory usage when saving images at 8-bit color depth.
  • Fixed: Magic Wand now works on very large images (e.g. 65535 x 65535 pixels) without an error.
  • Fixed: DIBV5 bitmaps should now work with Edit->Paste, which improves alpha channel handling. (thanks @null54 for the fix!)
  • Fixed: Top-down DIBs should now work correctly with Edit->Paste. (thanks @null54 for the fix!)

Enjoy

paint.net 4.1.6 is now available!

This update focuses on refreshing the app’s theming with new high-res icons and improved support for high-DPI configurations. Some new menu commands have been added, such as File -> Save All, and a Turkish translation has been added.

If you’re using the Windows Store release, you should get the update automatically within the next 24 hours. You can also force an update check by following these instructions.

For the Classic release, you should be offered the update automatically within the next week or so. You can get the updater soon by going to ⚙ Settings → Updates → Check Now. You can also download and install it directly from the website.

  • New: Completely redone high-res icons throughout the app which match the Microsoft Office style guidelines, with native support for up to 400% scaling (384 DPI)
  • New: File -> Save All (thanks @Bruce Bowyer-Smyth!)
  • New: Turkish language
  • New: Move Layer commands are now present in the Layers menu, not just on the Layers window
  • New: Layers -> Rotate 180 (thanks @null54!)
  • New: Plugins can now use the UIScaleFactor class, which simplifies making decisions about DPI and scaling
  • Improved: Image thumbnail list at the top of the main window now reacts to horizontal mouse wheel or trackpad swiping
  • Improved: The Text Tool’s "Font Size Metric" button now has a tooltip explaining it
  • Improved: When many images are open, Paint.NET now closes significantly faster (thanks @Bruce Bowyer-Smyth for the fix!)
  • Improved: File -> Open Recent now has up to 10 images (up from 8 )
  • Changed: Ctrl+Shift+F6 and +F7 will now also reset the floating window sizes for History and Layers, respectively (same if you Ctrl+Shift+Click on the button at the top-right of the main window)
  • Changed: (for plugins) EffectFlags.SingleRenderCall is deprecated. Plugins should use the new EffectRenderingSchedule.None option instead.
  • Changed: Settings -> Plugin Errors now shows up even if there are no plugin errors. This ensures consistency, especially with the newly asynchronous nature of plugin loading (otherwise there’s no way to distinguish "no errors" from "not done loading plugins").
  • Fixed: Items in the File -> Open Recent menu will no longer get bigger or smaller when moving between monitors with different DPIs
  • Fixed: An icon handle was being leaked every time a dialog was opened (thanks @null54 for the fix!)
  • Fixed a crash when running GPU effects (e.g. Black & White) on very large, very tall images
  • Fixed: "Bad" plugins can no longer ruin the undo system by rendering outside of the selection (thanks @BoltBait for helping out with this!)

Enjoy!

paint.net 4.1.6 beta build 7012 is now available

This should fix several issues that were reported in build 7010. Hopefully this is the last round of fixes needed for this release :)

This beta is available for the “Classic” (non-Store) release. You can use the built-in updater by going to ⚙ Settings → Updates → Check Now within the app (make sure “Also check for pre-release (beta) versions of paint.net” is checked!), or you can head over to the forum to get the direct download link.

Changes since beta build 7010:

  • Fixed the random crash when running most an effect with a selection (reported by lots of folks!)
  • Fixed the crash when changing the "Translucent Windows" setting if you have certain plugins installed (reported by @AndrewDavid)
  • Fixed the annoying tooltips in the statusbar (reported by @BoltBait) — I’ll get back to these after the migration to .NET Core 3 is completed, as this is a bug in WinForms. For now, tooltips are just disabled in the status bar, which is the same behavior as 4.1.5 and earlier.
  • Fixed the blank B/I/U/abc buttons when using the Blue theme (reported by @Rob.van.Grieken)

paint.net 4.1.6 beta build 7010 is now available

Hot on the heels of the recent alpha release, now there’s a beta to replace it :) At this point, 4.1.6 is now "complete" — nothing new is going to be added to it, all translations are text complete (but may still be updated), and I’m just making sure this thing is stable before pushing it out the door and moving on toward 4.1.7. I’m planning for that within the next week.

This beta is available for the “Classic” (non-Store) installation. You can use the built-in updater by going to ⚙ Settings → Updates → Check Now within the app (make sure “Also check for pre-release (beta) versions of paint.net” is checked!), or you can head over to the forum to get the direct download link.

And here are the changes since the aforementioned alpha build:

  • Improved: The newly updated app icons should now look a lot better at 120 DPI (125% scaling) and 144 DPI (150% scaling)
  • New: Layers -> Rotate 180 (thanks @null54!)
  • New: Move Layer commands are now present in the Layers menu, not just on the Layers window
  • New: Plugins can now use the UIScaleFactor class, which makes it easy to make decisions about DPI and scaling
  • Changed: Settings -> Plugin Errors now shows up even if there are no plugin errors. This ensures consistency, especially with the newly asynchronous nature of plugin loading (otherwise there’s no way to distinguish "no errors" from "not done loading plugins").
  • Changed: File -> Open Recent now has up to 10 images (up from 8 )
  • Fixed: Items in the File -> Open Recent menu will no longer get bigger or smaller when moving between monitors with different DPIs
  • Fixed: "Bad" plugins can no longer ruin the undo system by rendering outside of the selection (thanks @BoltBait for helping out with this!)
  • Improved: When many images are open, Paint.NET now closes significantly faster (thanks @Bruce Bowyer-Smyth for the fix!)
  • Improved: Image thumbnail list at the top of the main window now reacts to horizontal mouse wheel or trackpad swiping
  • Improved: The Text Tool’s "Font Size Metric" button now has a tooltip explaining it
  • Fixed a crash when running GPU effects (e.g. Black & White) on very large, very tall images (this was actually fixed in the alpha build 7000)

Enjoy!

paint.net 4.1.6 alpha (build 7000) with high DPI icons

(To download, please go to the forum where I’ve posted the download link, along with a copy of this blog post)

Please note that this is an “alpha” simply because I still plan on adding more stuff for the 4.1.6 release (or whatever version # it ends up being called … )

As I’ve discussed here (blog) and here (forum), I’ve been working on a new set of icons for the app along with full high-res /  high-DPI support. Things no longer look blurry on high resolution screens! This has been a 2 month project so far and I’m really glad to finally unveil it :)

All of the icons have been redone as vector art (SVG) and match the modern Microsoft Office style guidelines. They can now scale all the way from 100% (96 DPI) up to 400% (384 DPI) without looking too blurry. If you’re at 125% (120 DPI) or 150% (144 DPI) then things may still be a little blurry, but it’ll be loading the 200% images and scaling down instead of the 100% images and scaling up, so it’ll still look a whole lot better than before.

There may still be some layout bugs if you’re at >200% scaling, but they’re not new bugs. I do plan on fixing them. Most prominent is a very obvious glitch in the Colors window.

The only remaining art asset that hasn’t been vectorized is the actual application icon/logo. We’ll see about that …

Change log since the 4.1.5 release:

  • New: Completely redone icons throughout the app to match the Microsoft Office style guidelines, with native support for up to 400% scaling (384 DPI)
  • New: File -> Save All (thanks @Bruce Bowyer-Smyth!)
  • Changed: Ctrl+Shift+F6 and +F7 will now also reset the floating window sizes for History and Layers, respectively (same if you Ctrl+Shift+Click on the button at the top-right of the main window)
  • Fixed: An icon handle was being leaked every time a dialog was opened (thanks @null54 for the fix!)
  • New: Turkish language

A small preview of the new icons (sorry-not-sorry for the high res, no pixel was spared):

What’s next for Paint.NET in 2019?

It’s been a little over 9 months since I left Facebook, and since then I’ve been hard at work on Paint.NET. (There were two primary reasons for me leaving Facebook: 1) it was way too exhausting, which is also part of the reason I haven’t been blogging much for several years, and 2) I really just wanted to focus on Paint.NET for awhile.)

2018

Looking back on 2018, a lot was accomplished! In the 4.0.20 update back in January I shipped a dark theme, which I originally didn’t see the point of but now I can’t imagine the app without it. After that there was mostly radio silence until I released 4.1 in September. That update had quite a lot of infrastructure changes in it, both in the low-level bowels of my COM interop system (long story…), and in the addition of GPU-powered effects (which was powered using Direct2D, which was dependent on the aforementioned COM stuff). Since then, the 4.1.1 through 4.1.5 updates have focused on fixing a bunch of bugs that have popped up (which has been frustrating), and improving performance (notably for effect loading at startup, and canvas rendering when zoomed out).

2019

What’s next though? Well, I’ll start by quoting a recent article over at HostingAdvice that I did a small interview for:

After 10 years of working at Microsoft and several years at Facebook, Rick decided to focus exclusively on Paint.NET this year. “That means I’ve gone from having 20% of my time available to about 80%,” he said.

“I’m going to be spending a lot of time preparing infrastructure for the next big wave of features going into Paint.NET.”

To that end, Rick hopes to enhance the user interface with more attractive icons, allow users to install custom brushes, and introduce pen and pressure sensitivity for tablets.

With that, let’s start talking directly about what I’m planning and hoping to release in 2019:

App Icons and High-DPI

Paint.NET’s UI is quite functional for high DPI systems without any of the layout problems or truncated text elements that have plagued Windows apps since, well, forever. However, that’s no longer good enough in 2019. For starters, the app icons are all authored for 96 DPI (aka “100% scaling”), and look blurry at higher DPI settings. Upgrading all of that is a project I’ve just started working on, and is what the aforementioned article refers to as “more attractive icons.”

Beyond that, newer versions of Windows support dynamic scaling (changing the scaling without logging out and then in again), and per-monitor DPI. Right now if you change the system DPI while Paint.NET is open, it won’t look very good. Similarly if you move the app over to a monitor with a different DPI setting. This also affects use of Remote Desktop where the remote system’s DPI is different, and use of laptop docking stations when the external monitor’s DPI is different. These all make using Paint.NET in modern scenarios rather clumsy and frustrating. For instance: when I use my laptop with a 4K screen to remote into my desktop with a 2K screen, it sucks that I have to restart Paint.NET so it doesn’t look blurry.

Windows gets a bad rep for having bad high-DPI scaling, and part of the responsibility for fixing that reputation lies with application developers like me. Refreshing the app icons is the next thing I’ll be working on, and then I’ll upgrade the infrastructure for dynamic DPI (probably over the course of several updates). Thankfully these projects seem to be the “final frontier” for High DPI: once they’re done we can finally bury the hatchet on High DPI bugs.

.NET Core 3.0

Richard Lander’s post earlier in the year about .NET Core 3.0 shipping with WinForms and WPF really made my day. The more recent announcement that both WinForms and WPF would be open sourced has fulfilled a long-time dream of mine. I can’t wait to fork the ToolStrip classes and migrate them off of GDI+ 🙂 (this should be a good performance win)

It’s clear that, in the long-term, Paint.NET needs to migrate over to .NET Core. That’s where all of the improvements and bug fixes are being made, and it’s obvious that the .NET Framework is now in maintenance mode. On the engineering side this is mostly a packaging and deployment puzzle of balancing download size amongst several other variables. My initial estimations shows that the download size for Paint.NET could balloon from ~7.5MB (today) to north of 40MB if .NET Core is packaged “locally”. That’s a big sticker shock … but it may just be necessary.

And, for those who’re interested: the move to .NET Core will finally enable a truly portable version of Paint.NET since .NET Core can just be bundled into the local app directory. I’ve been slowly moving towards “app local deployment” of dependencies anyway; e.g. for the v4.1 release I got fed up with the Visual C++ runtime’s installation issues and moved them to be “app local”. The security arguments no longer convince me that it’s worth the massive hassles for both myself and end-users. The straw that broke the camel’s back (so to speak) on this was when the Surface Go shipped with an incorrectly signed version of the Visual C++ runtimes which then prevented Paint.NET from loading at all (remember: the Surface Go runs Windows 10 “S” by default and can only run Store apps).

Improved DDS support

The DDS support in Paint.NET works well, but hasn’t been updated to the newer DDS formats that have become more popular. Nicholas Hayes, aka “null54” on the forum, has written a plugin that provides better DDS support (forum link, and github link). This is a no-brainer for integration into Paint.NET so that everyone can benefit from these improvements (and without having to rename files to have a .dds2 extension, yuck!). Paint.NET is used a lot in the gaming biz, so this should help out a large audience of developers in this arena.

Brushes and Pressure Sensitivity

This is the big one. I’ve been wanting to get to this for years, and it’s finally time to get it done. The first thing to happen is that Paint.NET needs an improved selection of built-in brush stamps (currently only “circle” is implemented). Second, custom brushes need to be supported without the use of a plugin. This will bring brushes up to the same level that Shapes is now at. Third, pen and pressure sensitivity is desperately needed and long overdue. I’ll be posting more details when this project starts taking shape, and I’m hoping to start on it this summer.

(Keep in mind, however, that pressure sensitivity will require at least Windows 8 or maybe 10: the APIs for this do not exist on Windows 7.)

Expanded Plugin System(s)

I really wanted to ship 4.1.2 with GPU support for effect plugins. However, a high-priority security vulnerability forced me to shelve that at the last minute. Now that I’ve had more time to think about this, I’d like to revamp the effect plugin system further — it hasn’t seen much love in the last decade. Providing access to GPU acceleration and Direct2D is an obvious next step, but I also have an opportunity to clean things up in this area. Effects can’t easily combine (or compose) with other effects, and this makes it really hard to do arbitrarily complex things with them. It’s also difficult to add new functionality to the effect system without accidentally breaking other parts of it.

In addition, it’s been way overdue for Paint.NET to support more plugin types beyond effects and file types. Plugins should be able to access more than the current layer, and even be able to implement whole-image transforms, or to create a new image (whether from scratch or based on another image that’s already open). You can’t even write a rescaling plugin for Paint.NET right now! I don’t have concrete plans for specifically what I’ll be adding here, or when, but it’s high up on the priority list. And in the long term, I would still like to add support for tool plugins (something of a holy grail).

Until next time …

This roadmap for 2019 is ambitious, but I think I should finally have enough time to actually realize most of it. Hopefully I’ll be able to blog more in the coming year now that I’ve got more time and energy for it.

Paint.NET is only going to get better as time goes on, and I’d really like to thank everyone for all of their support in making this transition to full-time self-employment possible for me. Thanks for the donations, thanks for buying the Windows Store app, thanks for the crash reports, thanks for the feature requests, and thanks for all of the fish!