paint.net 5.0 is now available!

Welcome to Paint.NET 5.0! This major update has many performance improvements, new features including pressure sensitivity for pens and drawing tablets, and a brand new effect plugin system with GPU rendering support. Almost all of the built-in effects and adjustments now render using the GPU, greatly improving their performance and quality.

To get the update, scroll all the way to the bottom to the big bold “Get the Update” text.

image.png

What’s New

Pressure Sensitivity

Back by popular demand*, pressure sensitivity is now supported, enabling you to draw beautiful, natural-looking brush strokes (see above). Support for the Windows “pointer” input system (aka “Windows Ink”) is required. Most devices support this, including the Surface Pen and various drawing tablets from Wacom, UGEE, and more.

Path smoothing, sometimes called stabilization, is now implemented (enabled by default in the toolbar):

image.png

There is a new spacing property in the toolbar. The default is 15% which does a great job, but sometimes you need finer control. This also enables new styles of drawing, such as the following which was drawn with a spacing value of 200%:

image.png

The newly rewritten brush engine is supported by all of the brush tools: Paintbrush, Eraser, Clone Stamp, and Recolor. Support for more brush shapes and types, including custom brushes, will be making an appearance in a future update.

GPU, GPU, GPU!

Paint.NET, since v4.0, has already been using hardware accelerated rendering for drawing the canvas to the screen. In v4.1, GPU acceleration was added to a few effects (blurs, mostly). In v5.0, support for the GPU has been greatly expanded. More of the UI is now using using the GPU, including the Layers and History windows, the ruler, the image list at the top of the main windows, and the UI for the Curves and Levels adjustments. This improves performance, and also helps battery life on laptops.

In addition, (almost**) all adjustments and effects now use the GPU, resulting in much higher performance by leveraging Direct2D’s imaging and effects system with pixel shaders implemented using Sergio Pedri’s @sergiopedri fantastic ComputeSharp.D2D1 library. These effects are now running with full 32-bit floating point precision (128-bits per pixel), which greatly improves the quality of rendering and the accuracy of colors as they move through the processing pipeline.

Effect plugins can now use the GPU for rendering as well, and have full access to the Windows graphics libraries Direct2D, DirectWrite, and Windows Imaging Component (WIC). More on that later. (File Type plugins can also use these libraries, but GPU rendering is not supported there.)

The Move Selected Pixels tool has been upgraded to use the GPU when the Bicubic sampling option is selected. The performance of this proved to be so good that it is now the default mode (unless you are using software rendering or an Intel HD/UHD GPU, in which case Bilinear is still the default). A new Anisotropic sampling mode has been added, which also uses the GPU. Whether you use Bicubic or Anisotropic is up to personal taste; the former produces a sharper result, while the latter produces a smoother/softer result.

(Click for full-size image)

image.png

Configuration of GPU support is split into two sections: hardware acceleration for UI and the canvas, which can be enabled or disabled, and selection of the GPU that is used for rendering (tools, adjustments, and effects). By default Paint.NET will use what Windows identifies as the “performance GPU” for rendering, which ensures you get the best performance on systems with both an integrated GPU (“iGPU”) and a discrete GPU (“dGPU”). Previously, Paint.NET would only ever use the iGPU, so this is a huge performance improvement on laptops with hybrid graphics. The UI/canvas will always use what Windows identifies as the “default” GPU, which is usually the iGPU, and this helps ensure better battery life.

image.png

Apply Embedded Color Profile

Paint.NET does not have a Color Management System (CMS) like Photoshop, Krita, or The GIMP. I’m hoping to add that in a future update, but for now Image -> Apply Embedded Color Profile is a pragmatic solution that will help you make your images look correct.

image.png

Paint.NET, since v4.2, does a great job at preserving image metadata including EXIF, XMP, IPTC (new in 5.0 thanks to @null54), and color profiles. However, it does nothing with the color profile. If you’ve ever opened an image and the colors looked wrong inside the app and different outside of it (e.g. in your web browser), this is probably why. This command will convert the image to the sRGB color space and then remove the color profile metadata, enabling you to make edits while seeing the image in the way that it was meant to be seen.

Before and after example: (image source)

image.png image.png

Image -> Resize Improvements

Image -> Resize has been updated with new resampling modes: Adaptive and Lanczos. The Bicubic and Bilinear modes have been updated with improved quality, while the old implementation of Bilinear is now called Bilinear (Low Quality) and is akin to linear filtering in 3D graphics engines (only 4 samples per output pixel). Other than Bilinear (Low Quality), Nearest Neighbor, and Fant, these are all powered by Clinton Ingram‘s @saucecontrol amazing PhotoSauce.MagicScaler library. It produces extremely high quality results, and is also ultrafast.

image.png

Please note that the Super Sampling mode has been removed. The Adaptive mode produces superior quality, and should be used instead.

New Adjustments

There are a handful of new adjustments in this release: Exposure, Highlights / Shadows, and Temperature / Tint. These are staples of photo editing that you have previously needed to install plugins for.

image.png image.png
image.png image.png

In addition, the Sepia adjustment has been improved with an Intensity slider. A value of 0 produces grayscale, 50 is equivalent to previous versions of Paint.NET, and 100 is much more saturated.

image.png image.png image.png

New Effects

There’s a new Straighten effect, located in the Effects -> Photo submenu, which makes it easy to rotate and automatically zoom an image so that it fits within the canvas without any transparency creeping in along the edges:

image.png image.png

There’s now a built-in Drop Shadow effect, available in the Effects -> Object submenu. With the new Direct2D GPU image processing system, this was very easy to implement, and the performance is fantastic:

image.png

Bokeh Blur Effect

Lastly, Paint.NET now has a very high-quality Bokeh blur effect! This replaces the old Unfocus blur effect (which was Bokeh under a different name), both of which simulate the aesthetic quality of the blur produced by out-of-focus parts of an image. Developed in collaboration with Sergio Pedri @sergiopedri and Mike Pound (as seen on the Computerphile YouTube channel, like this one about Complex Bokeh Blurs), this version of Bokeh has a Quality slider that goes up to 10 instead of the usual 6 that you may have seen in other implementations such as ImageSharp’s (further details available on GitHub). This produces an extremely high quality result that eliminates almost all fringing artifacts, even on gamma-corrected images or those with a lot of contrasting edges. Be sure to crank the quality up when you’re also increasing the Gamma Exponent property, but be warned: it’s a bit of a GPU killer!*** This is available in the Effects -> Blurs menu:

image.png image.png

New Effect Plugin System

There’s a brand new, fully modernized system for effect plugins to use. The old system still works, and older plugins are still compatible. However, the new system has a lot of benefits and should be the basis for any new effect plugins.

The biggest new feature is hardware accelerated GPU rendering using Direct2D, its effects system, and pixel shaders. The base class for this is GpuEffect, although most plugins will want to use GpuImageEffect (or PropertyBasedGpuImageEffect to leverage IndirectUI) in order to best make use of the graph-based (“node-based”) effects and image processing system. There is also GpuDrawingEffect for when you want to issue imperative drawing commands (geometry, text, etc.). If you want to see how to work with all of this, I have written some sample plugins and the source code is available on GitHub.

On the CPU side, BitmapEffect is the replacement for the “classic” Effect class, and has some goodies of its own including expanded pixel format support: you can now read the image and its layers, and produce your output, in the pixel format of your choice including BGRA32, PBGRA32, RGBA64, or even CMYK32. Anything other than BGRA32 will eventually be converted back to BGRA32, but for now this enables you to more easily perform rendering at higher precision. Eventually, layers themselves will support these other pixel formats, and this will ensure that your effect is able to read and render at native precision.

Effect plugins can now access all layers of the current image. This is a big one! In addition, there’s also the ability to retrieve a composite bitmap of the whole image (all layers blended together).

Effect plugins can now access the image’s metadata, including EXIF, XMP, and IPTC (thanks @null54 for the IPTC support!). This is already being used in an update for @null54‘s PSFilterPdn plugin.

Effect plugins can now render outside of the active selection by using the DisableSelectionClipping rendering flag. This makes it possible to implement effects like drop shadows that are drawn around the selection, not just inside of it.

Effect plugins can now add tabs to their UI! IndirectUI-based plugins (e.g. PropertyBasedGpuImageEffect) can now add tabs to their UI in arbitrary configurations. @BoltBait has been using this a lot in his updated plugin pack, and has written a tutorial on how to use it in your own plugins. It’s also possible, in your rendering code, to know which tab is active, which is useful when you want to render decorations that you don’t include in the final rendering (you’d have a “Finish” tab with any final configuration properties). “Classic” effects (deriving from PropertyBasedEffect) can also use tabs.

There’s a new Label control which you can use to add text that isn’t tied to a property, or even just for adding some whitespace. There’s a new ShowHeaderLine property which you can use to remove the horizontal line from the property’s header (most of the built-in effects now use this). Drop-down controls can also set Multiline to false so that the label and the dropdown are drawn on the same line. Lastly, there is a new SetTargetWhenSourceEqualsAnyValueRule property collection rule which you can use to implement, among other things, correlations between dropdown and slider controls, as seen in the new Bokeh blur and updated Gaussian Blur effects.

Here’s a screenshot from @BoltBait‘s updated plugin pack, which makes great use of tabs and other new IndirectUI features:

image.png

Effects with custom UI (not IndirectUI-based) can use Direct2DControl to create custom controls using Direct2D, including support for hardware accelerated rendering on the GPU. There is also a Direct2DPictureBox control that you can use to display a static bitmap and render additional content above or below it.

Improved Effects and Adjustments

Many of the existing effects have been improved and updated, in addition to all being run on the GPU now:

  • Layers -> Rotate / Zoom, technically a distortion effect, now has a Quality slider, a Sampling property, and redone tiling capability.
    • The Tiling checkbox has been replaced with a Tiling Mode dropdown where you can choose between Transparent, Wrap, or Mirror.
    • Setting the Sampling property to Nearest Neighbor, while also zooming in, produces a pixelated and antialiased appearance.
  • Adjustments -> Brightness / Contrast now uses the GPU for rendering.
  • Adjustments -> Hue / Saturation now uses the GPU for rendering.
  • Adjustments -> Posterize now uses the GPU for rendering, and also allows posterization of the alpha channel.
  • Adjustments -> Sepia now uses the GPU for rendering and has an intensity slider.
  • Effects -> Artistic -> Ink Sketch now runs on the GPU and is significantly faster.
  • Effects -> Artistic -> Pencil Sketch now runs on the GPU and is significantly faster.
  • Effects -> Blurs -> Bokeh is a new effect that replaces the Unfocus effect. It uses the GPU for rendering.
  • Effects -> Blurs -> Fragment now uses the GPU for rendering and has improved rendering quality.
  • Effects -> Blurs -> Gaussian Blur has an increased range for its radius property which can now be specified in 0.1 pixel increments. It now also has a Gamma dropdown, Gamma Exponent slider, and a Quality slider.
    • The Gamma dropdown defaults to “sRGB (2.2)” which ensures gamma-correct results.
      • Setting this to “Linear (1.0)” will produces the same results as previous versions of Paint.NET.
    • The Gamma Exponent slider can be used to increase the prominence of brighter regions of the image. Values less than 1 produce a strange color bleeding effect that can be fun.
    • The quality level ranges from 1 to 4. The first 3 correspond to the optimization property of Direct2D’s Gaussian Blur effect, while the 4th level is a new, custom implementation that renders at an obscenely high level of quality and improves results with gamma-corrected or gamma-exaggerated rendering.
    • Previous versions of Paint.NET (v4.1 – v4.3) always rendered equivalently to a quality value of 3.
    • Warning: the 4th quality level is a GPU killer*** — even the fastest GPUs will struggle with this one!
  • Effects -> Blurs -> Motion Blur now has an Edge Mode property to control how pixel samples outside of the image are determined.
  • Effects -> Blurs -> Radial Blur has improved rendering quality, and its quality slider can now be set between 1.0 and 8.0 in steps of 0.1.
  • Effects -> Blurs -> Zoom Blur now uses the GPU for rendering, has improved rendering quality, and a Focus property to control the balance between the foreground and background. It now also has a quality slider thar can be set between 1.0 and 8.0 in steps of 0.1.
  • Effects -> Distort -> Bulge now uses the GPU for rendering, has improved rendering quality, and an Edge Behavior property.
  • Effects -> Distort -> Crystalize now uses the GPU for rendering and has improved rendering quality.
  • Effects -> Distort -> Dents now uses the GPU for rendering, has improved rendering quality, and an Angle property.
  • Effects -> Distort -> Frosted Glass now uses the GPU for rendering, has improved rendering quality, a Diffusion property, and a Randomize button.
    • The Diffusion property controls how pixels are distributed between the Minimum and Maximum Scatter Radius. Lower values will distribute pixels closer to the minimum radius, a value of 1.0 (the default) will evenly distribute pixels, and higher values will distribute pixels closer to the maximum radius.
    • Previously, the randomization would be reset every time you changed one of the property sliders. Now you can modify the effect in a more stable way and only re-randomize when you want to.
  • Effects -> Distort -> Pixelate now lets you specify a Scale Down and a Scale Up mode (pixelation is implemented by first scaling the image down, and then scaling it back up). This allows you to fine-tune the look of the effect for what you want to achieve.
  • Effects -> Distort -> Polar Inversion now runs on the GPU which has greatly improved its performance, and it has improved rendering quality.
  • Effects -> Distort -> Tile Reflection now runs on the GPU, has improved rendering quality, and an Edge Behavior property which can produce some really interesting results.
  • Effects -> Distort -> Twist now renders on the GPU and has improved rendering quality.
  • Effects -> Noise -> Add Noise now runs on the GPU and has a Randomize button. It will not re-randomize on every property change like it used to.
  • Effects -> Photo -> Glow now runs on the GPU and is significantly faster.
  • Effects -> Photo -> Sharpen was completely rewritten to produce much better results. It now has a Threshold slider.
  • Effects -> Photo -> Soften Portrait now runs on the GPU and is significantly faster.
  • Effects -> Photo -> Vignette now runs on the GPU and is significantly faster.
  • Effects -> Render -> Clouds now has a large number of additional blend modes.
  • Effects -> Render -> Julia Fractal and Mandelbrot Fractal now run on the GPU and are significantly faster. Depending on your CPU and GPU, you will see a performance improvement between 2x to 100x. You can also now choose a Blend Mode for these effects.
  • Effects -> Render -> Turbulence now has a Blend Mode dropdown instead of a Blend checkbox.
  • Effects -> Stylize -> Emboss now runs on the GPU and is significantly faster.
  • Effects -> Stylize -> Edge Detect has been completely rewritten. Instead of an Angle property, it now has Strength and Blurring sliders, an Algorithm dropdown (Sobel or Prewitt), and an Overlay Edges checkbox.
Miscellaneous

There are a lot of smaller changes throughout the app as well:

  • The Line/Curve tool has higher quality antialiasing, and a new Straight mode (in addition to Spline and Bezier).
    image.png
  • The Shapes tool has higher quality antialiasing as well.
  • The brightness of the transparency checkerboard can now be configured in Settings.
    image.png
  • Thumbnails in the Layers window have been made larger by 20%, making them easier to see at a glance.
  • IPTC metadata is now preserved. Plugins can also read/write IPTC metadata. Thanks to @null54 for implementing this!
  • You can now click-and-hold on +/- buttons in the toolbar instead of repeatedly clicking on them.
  • The selection is now rendered using the GPU, which helps with both performance and battery life.
  • Effects now run at a higher, smoother framerate. Previously the screen was updated at a fixed 20 frames-per-second, but now these updates are done as soon as possible. On a fast system with a high-refresh rate monitor you will really see the difference.
  • On non-English systems, Paint.NET will attempt to auto-localize the submenu names that effect plugins specify. For example: an Italian user will now see just a “Sfocature” sub-menu instead of both “Sfocature” and “Blurs”.
  • 32-bit CMYK images are now correctly imported. They are transformed to 32-bit BGRA sRGB and the color profile is removed. Thanks to Clinton Ingram @saucecontrol for suggesting and consulting on this.
  • There has been significant optimization through the rendering engine to reduce and remove transient allocations. Most rendering code is now able to run completely free of allocations. The whole app feels smoother! (When I’ve run v4.3.12 and v5.0 side-by-side, the new version was noticeably smoother at updating the canvas.)
  • The app has been updated to run on .NET 7, and all legacy C++/CLI code has been ported to C# with the help of Tanner Gooding‘s excellent TerraFX.Interop.Windows library.
  • The bundled AvifFileType plugin has been updated to version 1.1.22.0 (thanks @null54!)
System Requirements
  • Windows 10 v1809+ or Windows 11
    • NOTE: Windows 8.1 and Windows 7 SP1 are no longer supported.
  • 64-bit CPU and 64-bit version of Windows
    • Both Intel/AMD x64 and ARM64 are natively supported.
    • NOTE: 32-bit x86 is no longer supported.
  • Optional:
    • A pen or drawing tablet that supports Windows Ink
  • Recommended:
    • A CPU that supports AVX2, which includes most CPUs released since 2013.
      • Note that AVX2 is not required, but it helps performance quite a bit.
    • A discrete GPU such as an NVIDIA GeForce, AMD Radeon, or Intel Arc
      • or an AMD Radeon APU (a type of integrated GPU)
      • or an Intel Iris Plus or Iris Xe integrated GPU
    • The GPU must support Direct3D 11. Otherwise the CPU will be used for rendering, which will have much lower performance.
    • An Intel HD or UHD iGPU also works, but the default quality used across the app (e.g. in distortion effects and the Move Selected Pixels tool) will automatically be lowered in order to improve performance.

Get the Update

There are two releases of Paint.NET 5.0:

  • Microsoft Store release (recommended)
  • Classic Desktop release
    • Download the installer directly (web installer for all supported CPUs and OSes). This is the recommended download if you don’t have Paint.NET installed. It can also be used to update the app.
    • If you already have it installed, you should be offered the update automatically within the next week or so, but you can also get it immediately by going to ⚙ Settings -> Updates -> Check Now.
    • Offline Installers and Portable ZIPs are available over on GitHub.

* Pressure sensitivity was removed in v3.5, back in 2009, due to various technical issues with its implementation and lack of suitable hardware to test on.

** The only effects/adjustments that do not yet run on the GPU are: Auto-Level, Curves, Levels, Oil Painting, Surface Blur, Unfocus, Quantize, Median, Reduce Noise, Red Eye Removal, and Outline

*** Not literally. It will not damage your GPU, it just requires a lot of processing power.

Advertisement

14 thoughts on “paint.net 5.0 is now available!

  1. Numen76 says:

    I wish to congratulate you to such a major step forward, especially since it’s pretty much a one-man project. Luckily, there have also been breakthroughs re: artificial intelligence last year, and it seems AIs can now increasingly replace human programmers. Over time, maybe technological progress will allow you to use AI for adding additional features like layer masks/clipping. (In an ideal scenario, the AI could just code a new PDN out of nowhere which also runs on my Windows version, so I won’t need Windows 12 and a mandatory Microsoft account).

  2. Confidential Blogger says:

    Hi. I noticed that Paint.net 5 comes with a lot of .pdb files. Are they necessary? (I’m assuming the answer is yes. I’m just not certain for what. Profile guided performance thingy?)

    • Rick Brewster says:

      PDBs enable stack traces in crash logs to have file and line # information in them, which is critical for figuring out solutions to bugs/crashes, especially when all I have to go by is the crash log and stack trace.

    • Rick Brewster says:

      btw this isn’t something you have to write special code for. In .NET/C#, when you call ToString() on an Exception, the stack trace will automatically include this information if the PDB file(s) are present.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.