paint.net 4.2.8 is now available

This small update fixes a few pressing bugs, particularly for touch and pen input.

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 update sooner by going to ⚙ Settings → Updates → Check Now. You can also download and install it directly from the website.

Changes since 4.2.7:

  • Fixed: Pinch-to-zoom was not working when using a touch screen (regression in 4.2.6)
  • Fixed: Spacebar panning was not working when using a pen/stylus (regression in 4.2.6)
  • Fixed: EXIF metadata with non-ASCII characters is now preserved correctly
  • Fixed a crash that can happen when the Microsoft Store version of the app is closed for an update
  • Added /repair command-line argument, which will run PdnRepair.exe. This makes it easy to use Start -> Run -> paintdotnet:/repair so you don’t have to go fishing for the installation directory.

Enjoy!

paint.net 4.2.7 is now available

This is a hotfix that address a crash at startup that was happening on some systems.

If you’re using the Windows Store release, you should get the update automatically within the next 48 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 update sooner by going to ⚙ Settings → Updates → Check Now. You can also download and install it directly from the website.

Changes since 4.2.6:

  • Fixed a crash at startup (FileLoadException) due to 1) the stub for System.Runtime.dll not being updated, and 2) the rigid version binding policy that prevented the older version from working in its stead (which would’ve been fine in this case).

And, because this is a hotfix, here are the changes from 4.2.5:

  • Improved the input handling systems to use WM_POINTER, which enables glitch-free drawing when using a pen or stylus (e.g. Surface Pen, Wacom/Ugee tablet) (see here: https://forums.getpaint.net/topic/113173-the-first-5mm-of-a-freehand-line-are-straight-when-using-a-tablet/ ). This will also be the basis for adding pressure sensitivity in a future release (v4.3).
  • Added a "Native pointer input" setting if a "pointer" device is available (pen, tablet, touch screen). Disabling this will cause any pointer device to be emulated as a mouse, which may be more compatible but at the cost of smoothness. Pointer devices are listed in Settings -> Diagnostics.
  • Removed the "Fluid mouse input" setting because the use of GetMouseMovePointsEx() has been removed (it’s a very buggy and broken API). This finally fixes a number of weird issues related to erratic or "scribbly" drawing.
  • Improved performance of Move Selected Pixels, Shapes, and Gradient tools when releasing the mouse button at the end of drag-and-drop gesture. Previously, anything rendered between the last mouse "move" and "up" events was re-rendered, resulting in the appearance of a delay/lag.
  • Greatly improved performance of layer thumbnails when switching between images
  • Improved: The image list at the top can now be scrolled by clicking the arrow buttons and holding the mouse down, just like a regular scroll bar button. (Previously you had to click repeatedly). This improves usability, but was also noted as being important for accessibility.
  • Improved: Smooth scrolling animations have been removed from the image list and layers list due to them just not working very well.
  • Improved window chrome/theming when the app is running in Remote Desktop on Windows 10
  • Changed: The size of the default/initial image ("Untitled") is now scaled exactly by system DPI setting (previously scaled by integer/floor of DPI setting). So at 150% DPI scaling this image will now be 1200×900 instead of 800×600.
  • Fixed some high-DPI layout bugs with the Layer Properties dialog, while also preparing this UI for future additions
  • Fixed a crash (OutOfVideoMemoryException) on systems with hybrid GPU setups that are configured wrong. This seems to be a bug in Windows and DirectX. A "hybrid GPU" setup is an Intel iGPU or AMD APU paired with a discrete GPU in a laptop.
  • Improved handling of the dreaded "NoHardwareDeviceException" crash: The user will be notified of how to fix this. It happens only on 2nd generation Intel Core systems with NVIDIA "Optimus" GPUs (GeForce or Quadro) when the NVIDIA Control Panel is set to force apps (or just Paint.NET) to use the NVIDIA GPU. This is a bug in the NVIDIA driver and/or in DirectX.
  • Fixed images being pasted incorrectly from Outlook 2016/365. This is actually a bug in Outlook: it puts PNGs on the clipboard that are arbitrarily cropped and scaled for some reason, and specifies they are the preferred format to use when pasting. This completely boggles my mind, it’s just really weird, I can’t imagine why it’s done this way.
  • Fixed some clipboard image handling for plugins (regular Copy/Paste is unaffected)
  • Changed: SSE2 is now required for 32-bit/x86 systems (prevously, only SSE was required). See blog post: https://blog.getpaint.net/2019/10/14/paint-net-v4-2-6-will-require-sse2-on-32-bit-x86/
  • Updated bundled WebPFileType plugin to v1.3.1.0 (thanks @null54)
  • Updated bundled DDSFileTypePlus plugin to v1.9.8.0 (thanks @null54!)

paint.net 4.2.6 rollout suspended – 4.2.7 soon!

Just a quick note that I’ve removed 4.2.6 from the auto-updater because a lot of people are having problems with it crashing immediately after installation. I’m trying to get a 4.2.7 release out ASAP.

If you’re already on 4.2.6 and it’s working fine: great! You’ll be fine, no need to worry. This doesn’t seem to affect the Microsoft Store version either.

The problem seems to be that the local copy of the System.Runtime.dll stub was updated to a new version (4.1.2.0), but some systems are holding onto the old version instead (4.0.0.0). When the app needs to load it, the .NET runtime gets mad because it can’t find 4.1.2.0. Even though it’s just a stub that doesn’t do anything …

This is just a giant mess stemming from adding the System.Buffers nuget package in this version. All I wanted to do was use ArrayPool, but it brought along about 50 stub DLLs from .NET Core and it has caused a ton of versioning nonsense into the installation.

There also seems to be a small bug in the shell extension (which provides File Explorer thumbnails) that may be keeping this file locked, and another bug in the setup wizard that’s ignoring a flag indicating that a reboot is needed, and all 3 of these problems are causing quite the storm.

paint.net 4.2.6 is now available!

This update is focusing on some important fixes and performance improvements, and getting some infrastructure ready for future releases so that pens and tablets with pressure sensitivity can be fully supported (planned for v4.3).

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 update sooner by going to ⚙ Settings → Updates → Check Now. You can also download and install it directly from the website.

Changes since 4.2.5:

  • Improved the input handling systems to use WM_POINTER, which enables glitch-free drawing when using a pen or stylus (e.g. Surface Pen, Wacom/Ugee tablet) (see here: https://forums.getpaint.net/topic/113173-the-first-5mm-of-a-freehand-line-are-straight-when-using-a-tablet/ ). This will also be the basis for adding pressure sensitivity in a future release (v4.3).
  • Added a "Native pointer input" setting if a "pointer" device is available (pen, tablet, touch screen). Disabling this will cause any pointer device to be emulated as a mouse, which may be more compatible but at the cost of smoothness. Pointer devices are listed in Settings -> Diagnostics.
  • Removed the "Fluid mouse input" setting because the use of GetMouseMovePointsEx() has been removed (it’s a very buggy and broken API). This finally fixes a number of weird issues related to erratic or "scribbly" drawing.
  • Improved performance of Move Selected Pixels, Shapes, and Gradient tools when releasing the mouse button at the end of drag-and-drop gesture. Previously, anything rendered between the last mouse "move" and "up" events was re-rendered, resulting in the appearance of a delay/lag.
  • Greatly improved performance of layer thumbnails when switching between images
  • Improved: The image list at the top can now be scrolled by clicking the arrow buttons and holding the mouse down, just like a regular scroll bar button. (Previously you had to click repeatedly). This improves usability, but was also noted as being important for accessibility.
  • Improved: Smooth scrolling animations have been removed from the image list and layers list due to them just not working very well.
  • Improved window chrome/theming when the app is running in Remote Desktop on Windows 10
  • Changed: The size of the default/initial image ("Untitled") is now scaled exactly by system DPI setting (previously scaled by integer/floor of DPI setting). So at 150% DPI scaling this image will now be 1200×900 instead of 800×600.
  • Fixed some high-DPI layout bugs with the Layer Properties dialog, while also preparing this UI for future additions
  • Fixed a crash (OutOfVideoMemoryException) on systems with hybrid GPU setups that are configured wrong. This seems to be a bug in Windows and DirectX. A "hybrid GPU" setup is an Intel iGPU or AMD APU paired with a discrete GPU in a laptop.
  • Improved handling of the dreaded "NoHardwareDeviceException" crash: The user will be notified of how to fix this. It happens only on 2nd generation Intel Core systems with NVIDIA "Optimus" GPUs (GeForce or Quadro) when the NVIDIA Control Panel is set to force apps (or just Paint.NET) to use the NVIDIA GPU. This is a bug in the NVIDIA driver and/or in DirectX.
  • Fixed images being pasted incorrectly from Outlook 2016/365. This is actually a bug in Outlook: it puts PNGs on the clipboard that are arbitrarily cropped and scaled for some reason, and specifies they are the preferred format to use when pasting. This completely boggles my mind, it’s just really weird, I can’t imagine why it’s done this way.
  • Fixed some clipboard image handling for plugins (regular Copy/Paste is unaffected)
  • Changed: SSE2 is now required for 32-bit/x86 systems (prevously, only SSE was required). See blog post: https://blog.getpaint.net/2019/10/14/paint-net-v4-2-6-will-require-sse2-on-32-bit-x86/
  • Updated bundled WebPFileType plugin to v1.3.1.0 (thanks @null54)
  • Updated bundled DDSFileTypePlus plugin to v1.9.8.0 (thanks @null54!)

Enjoy!

paint.net 4.2.6 beta build 7263

This release just graduated into beta, which means pretty much everything should be working the way it should, and translations have been updated. It should be a short path from here to the final release of 4.2.6, which means I can start working on the next big release, 4.3, which will focus on brushes and pens (some of the infrastructure for which is in this release!).

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. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app.

image.png

You can also download the update directly at the forum.

Changes since 4.2.6 alpha build 4258:

  • Fixed: The ability to drag a selection while drawing it was not working. (Click-and-drag with the left button to draw, but before releasing the left button you may click-and-drag with the right button to move it around.) (This was a regression in 4.2.6.)
  • Improved: The image list at the top can now be scrolled by clicking the arrow buttons and holding the mouse down, just like a regular scroll bar button. (Previously you had to click repeatedly). This improves usability, but was also noted as being important for accessibility.
  • Improved: Smooth scrolling animations have been removed from the image list and layers list due to them just not working very well.

paint.net 4.2.6 alpha build 7258

This build should fix the mouse input and drawing issues that were happening when multiple monitors of different DPI settings were being used. (for example: https://forums.getpaint.net/topic/115494-paintnet-426-alpha-build-7256/?do=findComment&comment=564920)

On a technical note, I’m removing the use of the GetMouseMovePointsEx API because it has been nothing but trouble over the last 6 years. It was supposed to provide smoother mouse input that was less dependent on the performance of the system or app, but that hope has been completely squashed. I’m fed up with it, it’s just a completely broken API and I’ve wasted way too many hours and days of my life debugging it and trying to hunt down any shred of good documentation or sample code for it.

Microsoft broke GetMouseMovePointsEx in Windows 8 and they just haven’t bothered to notice it or fix it (it works great in Windows 7!). On top of that, the newer input system (WM_POINTER) has a method, GetPointerInfoHistory, that’s supposed to provide the same functionality … but it doesn’t! It only ever retrieves the most recent mouse event (history count is always 1). So if you call EnableMouseInPointer you can still never retrieve any mouse movement events that your app wasn’t fast enough to process. Thankfully Paint.NET processes mouse events fast enough that this really isn’t a problem, but someone is just asleep at the wheel over at Microsoft. Thankfully the WM_POINTER system seems to work fantastically well for pens, drawing tablets, and touch screens.

(The above technical rant is provided for the benefit of any other poor developers out there who happen to try and make use of the cursed GetMouseMovePointsEx API and who stumble across this through a Google search. Stay away! It’s broken! Like completely, utterly, maddeningly broken! You’ll go crazy trying to make it work!)

All this means that the "Fluid mouse input" setting has been removed from Settings. It is no longer applicable. We can all forget about it and sleep better now.

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. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app.

image.png

You can also download directly using the link over at the forum.

Changes since 4.2.6 alpha build 7256:

  • Fixed erratic and buggy mouse input handling when using multiple monitors with different DPI settings. The use of the GetMouseMovePointsEx API has been removed because it has been totally broken since Windows 8 except in increasingly narrow situations (single monitor, static DPI that never changes, not in a VM, no Remote Desktop, etc.).

paint.net 4.2.6 alpha build 7256

This should fix the 2 big crashes that people have been reporting.

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. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app.

image.png

You can also download directly: https://github.com/paintdotnet/release/releases/download/4.206.7256.6914/paint.net.4.206.7256.6914.install.zip

Forum discussion is here: https://forums.getpaint.net/topic/115494-paintnet-426-alpha-build-7256/

Changes since 4.2.6 alpha build 7254:

  • Fixed the crash when using pointer devices for drawing. This also affected mouse drawing when the app’s DPI didn’t match the monitor’s DPI.
  • Fixed the crash when saving an image and dismissing the Save Configuration dialog before it could draw anything (e.g. by pressing Enter)

paint.net 4.2.6 alpha build 7254

This build is just fixing a few small things. Hopefully I’ll have a beta by next week, and the final by Thanksgiving!

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. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app.

image.png

You can also download directly: https://github.com/paintdotnet/release/releases/download/4.206.7254.40989/paint.net.4.206.7254.40989.install.zip

Forum discussion is here: https://forums.getpaint.net/topic/115486-paintnet-426-alpha-build-7254/

Changes since 4.2.6 alpha build 7250:

  • Fixed a crash in the Layer Properties dialog when using the keyboard to change the layer’s Opacity
  • New: Added “Native pointer input” setting if a “pointer” device is available (pen, tablet, touch screen). Disabling this will cause any pointer device to be emulated as a mouse, and may be more compatible.

I’m still waiting on some hardware to arrive before I’m able to properly fix the other crash I’ve been getting reports of (example: https://forums.getpaint.net/topic/115459-paintnet-426-alpha-build-7250/?do=findComment&comment=564745). Until then I’ve added some extra information to the crash message which should help me get to the root of the issue.

paint.net 4.2.6 alpha (build 7250)

This update is focusing on small fixes, performance improvements, and getting some infrastructure ready for future releases.

Pen/stylus support (pressure sensitivity) is finally coming back in 4.3, but the initial groundwork for that is in this release. If you’re not using a pen or a stylus then you should see no difference in this release, but it’s also really important to verify that that’s the case! If anything has changed then it’s very important to report that to me. I’ve redone a lot of the input stack to use WM_POINTER if available, but the “classic” path is still there for handling regular mouse input.

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. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app.

image.png

There’s also a direct download link over on the forum.

Changes since 4.2.5:

  • Improved input handling systems to use WM_POINTER, which enables glitch-free drawing when using a pen or stylus (e.g. Surface w/ Pen) (see here: https://forums.getpaint.net/topic/113173-the-first-5mm-of-a-freehand-line-are-straight-when-using-a-tablet/ ). This will also be the basis for adding pressure sensitivity in a future release (v4.3). Note that Windows 7 is unaffected by this.
  • Greatly improved performance of layer thumbnails when switching between images
  • Fixed a crash (OutOfVideoMemoryException) on systems with hybrid GPU setups that are configured wrong. This seems to be a bug in Windows and DirectX. A "hybrid GPU" setup is an Intel iGPU or AMD APU paired with a discrete GPU in a laptop.
  • Improved handling of the dreaded "NoHardwareDeviceException" crash: The user will be notified of how to fix this. It happens only on 2nd generation Intel Core systems with NVIDIA "Optimus" GPUs (GeForce or Quadro) when the NVIDIA Control Panel is set to force apps (or just Paint.NET) to use the NVIDIA GPU. This is a bug in the NVIDIA driver and/or in DirectX.
  • Improved performance of Move Selected Pixels, Shapes, and Gradient tools when releasing the mouse button at the end of drag-and-drop gesture. Previously, anything rendered between the last mouse "move" and "up" events was re-rendered, resulting in the appearance of a delay/lag.
  • Fixed some clipboard image handling for plugins (regular Copy/Paste is unaffected)
  • Improved window chrome/theming when the app is running in Remote Desktop on Windows 10
  • Fixed images being pasted incorrectly from Outlook 2016/365. This is actually a bug in Outlook: it puts PNGs on the clipboard that are arbitrarily cropped and scaled for some reason, and specifies they are the preferred format to use when pasting. This completely boggles my mind, it’s just really weird, I can’t imagine why it’s done this way.
  • Changed: The size of the default/initial image ("Untitled") is now scaled exactly by system DPI setting (previously scaled by integer/floor of DPI setting). So at 150% DPI scaling this image will now be 1200×900 instead of 800×600.
  • Fixed some high-DPI layout bugs with the Layer Properties dialog, while also preparing this UI for future additions
  • Updated bundled WebPFileType plugin to v1.3.1.0 (thanks @null54!)
  • Updated bundled DDSFileTypePlus plugin to v1.9.8.0 (thanks @null54!)
  • Changed: SSE2 is now required for 32-bit/x86 systems (prevously, only SSE was required). See blog post: https://blog.getpaint.net/2019/10/14/paint-net-v4-2-6-will-require-sse2-on-32-bit-x86/ 

Paint.NET v4.2.6 will require SSE2 on 32-bit / x86

I’m just giving everyone a heads-up that the minimum system requirements will be increasing a little with the upcoming version 4.2.6 update. The change is simply to require a processor with SSE2 instead of SSE for the 32-bit version of the app. The 64-bit version is unchanged; it has always required SSE2 because the 64-bit “x64” instruction set has always included SSE2 (as per AMD, Intel, and Microsoft).

Most systems aren’t affected by this. All modern CPUs have had support for SSE2 since 2003 or so.

Here’s a list of the newest processors that will no longer be supported:

So on the Intel side you just need a Pentium 4 or newer (circa 2000). On the AMD side you’ll need an Athlon 64 or newer (circa 2003). So if you bought your computer within the last, oh, 15 years … you’ll be fine! Otherwise you should probably upgrade anyway, or just stick with older versions of Paint.NET and turn off the built-in updater.

I’ve never really felt a strong compulsion to bump up the minimum CPU requirements. I always maintain “scalar” code paths for anything optimized to use SIMD instructions (SSE2, AVX2, etc.) so that I never get locked in to any particular instruction set or CPU architecture. This permits me to port to other CPU architectures, e.g. ARM, if/when that actually becomes compelling or even necessary.

However, .NET Core requires SSE and SSE2 on x86, so this change will help get things ready for that migration. I don’t have a concrete timeline for this, and my estimates for things like this have historically been bad, but hopefully within the next year or so.

This also means the 32-bit version of the app will get a small performance boost in the 4.2.6 update. The Visual C++ compiler optimizes a few key code paths in the C++ code which are used for things like BGRA32 –> PBGRA32 pixel format conversion, as well conversions between integers, floats, and doubles. (However, with the migration to .NET Core, these may actually be better implemented in C# code!)