- This version has been migrated from .NET Framework to .NET 5, includes major performance optimizations across the entire app, and adds native support for ARM64 devices such as the Microsoft Surface Pro X.
- New: The app has been migrated to .NET 5, and performance has been greatly improved as a result.
- New: ARM64 is now natively supported, which improves performance on devices such as the Surface Pro X.
- New: .NET no longer needs to be installed on the system because the app now uses self-contained deployment.
- New: Portable ZIPs are now available. Please note that portable installations do not currently update automatically.
- Improved performance of most effects and other compute-intensive tasks by about 20% on average, due to .NET 5's improved code generation (JIT).
- Improved startup performance for the Microsoft Store release. Previously, .NET Framework's NGEN was unavailable for Store apps, but now .NET 5 enables self-contained deployment along with ReadyToRun + crossgen, which serves the same purpose.
- Improved performance: Many areas of the app have been optimized to use SIMD (SSE2/3/4.1, AVX2) on x86/x64:
- Drawing on an image with a large number of layers is faster
- Drawing with the Gradient Tool's alpha mode is faster
- Drawing with the Recolor tool is faster
- Drawing with the Eraser or Clone Stamp tool is faster when using a color whose alpha value is less than 255
- Drawing with the Overwrite blend mode is faster
- Drawing with the Shapes tool is faster, due to improved compositing performance
- Drawing with a brush tool without antialiasing is faster
- Tile compression has lower overhead due to being optimized for SSE2 and AVX2
- Working with complex selections is faster
- Many other optimizations all throughout the application and rendering engine
- Improved performance of loading custom Shapes by ~16x on 2nd and subsequent app starts.
- Improved performance of the Magic Wand tool by a substantial amount.
- Improved performance of the Paint Bucket tool by a substantial amount.
- Improved performance of the Paint Bucket when changing the color or certain other toolbar settings by not recalculating the stencil buffer for the filled area.
Changes should now be visible immediately.
- Improved performance of Polar Inversion by 3x, mostly as a corollary to fixing a bug that was causing hangs, and a little bit due to .NET 5.
- Improved performance on systems without HyperThreading by reserving 1 core for the UI. Performance is also improved on systems with it by utilizing more of the logical cores.
- Improved performance while installing or updating the app, due to no longer needing the "Optimizing performance for your system" stage (NGEN has been replaced with ReadyToRun via crossgen).
- Improved memory usage when custom shapes are installed so they don't litter the heap with hundreds of thousands of boxed value types (e.g. floats and points).
- Improved selection antialiasing quality by using a 4x4 super sampling filter instead of a 3x3 super sampling filter. The code has also been optimized to use SSSE3 on x86/x64.
- Improved: Effect and File Type plugins can now be organized into folders. The plugin loader will recursively search for DLLs up to 1 folder deep.
- Fixed a bug when saving with "Auto Detect" bit-depth which was causing fidelity loss on some images that already had 256 colors or less.
- Fixed: There were some issues with zooming in/out using the keyboard, where the anchoring point was not calculated correctly, causing the canvas to drift in the wrong direction.
- Fixed the inability to use middle-mouse panning after using a selection tool and pressing delete before releasing the mouse button.
- Improved: Plugins are now loaded into isolated AssemblyLoadContexts, which improves stability and resiliency to various problems with versioning, loading dependencies, plugin bugs, and incorrect plugin installation.
- Fixed a crash when trying to draw a fixed-size rectangle selection that was larger than the image.
- Fixed a bug with the Tolerance slider where both 58% and 59% would be displayed as 58%, due to a rounding issue.
The correct value was actually being used, it just wasn't being displayed correctly.
- Added a /disablePlugins command-line argument to aid in troubleshooting various issues with app startup and incorrect plugin installation.
- New: Additional directories can now be specified for plugin discovery, which (e.g.) enables the use of OneDrive for storing plugins.
- Note that this does not work with the portable version of the app, but you can install plugins next to the app so it isn't necessary.
- Updated the bundled AvifFileType plugin to v22.214.171.124, courtesy of @null54, which includes support for multi-layer AVIF files, and adds native support for ARM64. See the project's GitHub Releases page for more information.
- Updated the bundled DdsFileTypePlus plugin to v126.96.36.199, courtesy of @null54, which adds native support for ARM64. See the project's GitHub Releases page for more information.
- Updated the bundled WebPFileType plugin to v188.8.131.52, courtesy of @null54, which adds native support for ARM64. See the project's GitHub Releases page for more information.
- Changed: FileType.IsReflexive() is now deprecated via [Obsolete], and is no longer honored. However, the Save Configuration dialog will no longer try to generate previews for FileTypes that do not specify any file extensions for loading, which is what this method was being used for.
- Known Issue: Due to crashing, GPU accelerated effects (Gaussian Blur, Motion Blur, Radial Blur) on ARM64 will actually use the CPU for rendering.
- New: Effect - Color - Quantize, which applies palette reduction to 256 colors or less, along with dithering. This is the same algorithm used when saving images at 8-bit color depth or lower.
- Fixed and improved palette generation when saving at 8-bit color depth or less
- Greatly optimized performance of palette generation and image quantization
- Added option to choose between Octree (default) and Median Cut algorithms for palette quantization when saving at 8-bit color depth or less
- Fixed a crash in Move tools when the selection was 0-width and/or 0-height
- Added tooltips w/ shortcut keys to the Tools dropdown in the toolbar
- Fixed IndirectUI ColorWheel rendering (thanks @toehead2001!)
- Fixed a crash in the Text tool when using Ctrl+(Left,Right,Backspace,Delete) (thanks @Bruce Bowyer-Smyth!)
- Changed: New layers are now filled with #00000000 instead of #00FFFFFF
- Fixed a crash when working with selections (OutOfMemoryException)
- New: Effects can now access the Document's DPI via EffectEnvironmentParameters.DocumentResolution
- Fixed drawing of the color palette in the Colors window when using some non-standard DPI scaling settings (e.g. 1.15x)
- Fixed a crash when using EdHarvey's Threshold plugin
- Fixed the return value from PdnRegion.GetBoundsInt() so it's not anchored at (0,0) unless it should be
- Fixed premultiplied-to-straight color conversion on some code paths (thanks @null54!)
- Updated bundled AvifFileType plugin to v184.108.40.206, which includes performance optimizations and bug fixes. See its GitHub releases page (https://github.com/0xC0000054/pdn-avif/releases) for more info.
- Updated bundled DDSFileTypePlus plugin to v220.127.116.11, which uses an updated version of DirectXTex (2021-04-06).
- New: Holding Ctrl while using the Color Picker tool will sample from the merged image (vs. just the current layer)
- New: The file name in the title bar will now have a prepended asterisk when it has unsaved changes
- Changed: The image close 'X' button can now be clicked for images that are not currently active
- Changed: In the Text tool, Ctrl+(Backspace, Delete, Arrow Keys) has been improved to work more like Microsoft Word. Thanks to @Bruce Bowyer-Smyth for the patch!
- Fixed: The Rectangle Select tool, when used to draw a constrained, fixed ratio, or fixed size selection, will now correctly clamp the rectangle to be within the canvas
- Fixed: Layers -> Move Layer Up/Down/Top/Bottom was not working for images with fewer than 3 layers
- Fixed: Edit -> Erase Selection will now fill with transparent black (#00000000) instead of transparent white (#00FFFFFF)
- Fixed: Custom Shapes will now be displayed in a consistently sorted order
- Fixed: ".pdnSave" ghost files should no longer linger when saving to the desktop. This was due to a bug in Windows and File Explorer.
- Fixed crashes due to DXGI/Direct3D "lost device" or "device removed" errors that can happen for various reasons (duck/undock, driver update, low memory, etc.)
- New: Plugins can now use the IArrayPoolService, a wrapper around .NET's ArrayPool, to optimize their array allocations
- Updated bundled AVIF FileType Plus to v1.1.6. See the pdn-avif releases page on GitHu for more information.
- New: AV1 (*.avif) images can now be saved (not just opened), due to bundling of @null54's AvifFileType plugin (v18.104.22.168).
Installation of Microsoft's codec from the Microsoft Store is no longer necessary, which means this also works on Windows 7 and 8.1.
- Improved performance and memory usage in the canvas rendering engine, especially when working with large images or images with many layers.
This is most noticeable when scrolling and zooming.
- Improved CPU usage when a selection is active and when GPU accelerated rendering is disabled
- Improved CPU/GPU usage when a selection is active but the app is not (the animation is disabled)
- Reduced memory usage when working with images that have regions of solid color
- Fixed the Magic Wand and Paint Bucket tools so that they do calculations in the premultiplied alpha color space.
This ensures that transparent colors (alpha=0) with different RGB values are treated as equal, and do not create borders.
- Fixed the Move Selected Pixels tool so that it fills the uncovered region with 0 (transparent), instead of a transparent version of the secondary color.
- Fixed: Backspace now works correctly in the Colors form: it does not execute Edit → Fill Selection
- Fixed an issue where saving an image at 4-bit color depth (usually pixel art) was using an incorrect palette (reduced color count/quality).
This was due to a bug in Windows Imaging Component (WIC).
- Greatly improved performance when saving images at 8-bit color depth
- Fixed an issue where very large images (e.g. 50000 x 50000 px) couldn't be saved at indexed bit-depths (8-bit or less) due to a bug in Windows Imaging Component (WIC).
- Fixed an issue where BMP images couldn't be loaded if they had the .PNG extension (there's an Android screenshot utility out there which does this ...)
- Improved: Ellipse Selection Tool's now tessellates at a higher resolution, resulting in smoother circles at small sizes
- Fixed a rare crash in the Gradient tool ("The tool must be in the Drawing state ...")
- New: Added a list of the DLLs that are loaded into the process on the Settings → Diagnostics page.
This is to help troubleshooting scenarios.
- Fixed an issue with copying large images to the clipboard: if an image would take up more than 4GB, it could not be copied because the DIB and DIBV5 formats cannot be larger than that.
Now, the DIB and DIBV5 formats are not placed on the clipboard if this happens.
- Fixed an issue with Effect plugin tooltips which was preventing the menu item from being easily clicked (thanks @toe_head2001 for the fix!)
- Fixed an issue that was preventing Effect configuration dialogs from working correctly in the Visual Studio designer (thanks @toe_head2001 for the fix!)
- Added diagnostics information to most error dialogs.
This is to help with troubleshooting.
- Fixed: Scanning will now apply the DPI (resolution) from the scanner to the image, if possible
- Updated bundled DdsFileTypePlus plugin to v22.214.171.124.
See the pdn-ddsfiletype-plus change log on GitHub for more information. Thanks @null54!
- New: Added 2-bit per pixel support when saving as PNG
- New: Added 1-bit per pixel support when saving as PNG, BMP, and TIFF
- Fixed low-bit-depth saving quality (8-bit, etc.), as it would sometimes produce very bad results (e.g. only using 64 colors instead of 256)
- Fixed: Resizing an image at very large sizes (e.g. 32K pixels to 64K pixels) would fail due to an arithmetic overflow
- Fixed: Sometimes recently saved images would not have an updated thumbnail in File Explorer unless/until its window was manually refreshed
- Fixed: Sometimes saving an image to a network share would not work
- Updated bundled DDSFileTypePlus plugin to version 126.96.36.199, which fixes an issue when loading and saving images using the sRGB color space. This issue was reported here.
- Fixed an error that was preventing some old PDN images from loading
- Fixed a crash in the new selection outline renderer (due to misaligned Push/PopAxisAlignedClip calls)
- Changed saving to use the ReplaceFile Win32 API, which improves its compatibility
- Fixed an EndOfStreamException error that prevented some JPEGs from opening (thanks @null54 for the fix!)
- New: XMP metadata is now preserved for supported file types (PDN, JPEG, PNG, TIFF, JPEG XR, HEIC, AVIF, WEBP)
- New: Belarusian (be) translation
- New: Greek (el) translation
- New: Slovenian (sl) translation
- New: Added a right-click context menu to the image thumbnail/tab. It contains commands for Copy Path, Open Containing Folder, Save, Save As, and Close.
- New: The items in the File -> Open Recent menu now have a tooltip with the full file path for the image
- Changed: The selection outline animation is now smoother (2x the framerate)
- Fixed: Saving with the HEIC file type is no longer limited to a max Quality value of 90.
This limitation was in place because of a crash due to heap corruption, which no longer happens.
- Fixed: The NVIDIA sharpening setting will no longer cause trippy distortions in the canvas area
- Fixed an issue with loading very small TGA images
- Fixed: Error dialogs when opening images now consistently show the file path
- Fixed a PropertyNotFoundException error message when saving JPEG images with a particular ordering of metadata. This was due to a bug in Windows 7's WIC JPEG codec.
- Fixed clipped text rendering in the Curves adjustment dialog in some non-English translations.
- Fixed a crash when running the app with a DPI scaling setting of 500%
- Fixed a crash that would sometimes happen when running effects with very small selections
- Fixed some IndirectUI controls not honoring their default values if also initialized in read only (disabled) mode. Thanks @BoltBait for the fix!
- Fixed a memory leak in the effect system that was causing 1 orphaned thread per effect invocation
- Changed: Removed the use of NTFS Transactions, which was causing trouble with OneDrive.
Microsoft has also deprecated this technology.
- New: Added /openCrashLogFolder command-line argument.
This is intended for simplifying troubleshooting workflows.
- New: Added /forceUpdateCheck command-line argument.
This is intended for troubleshooting scenarios to simplify acquiring the latest version, e.g. "just run paintdotnet:/forceUpdateCheck" instead giving a longer list of buttons to click on.
- Updated WebPFileType plugin to version 188.8.131.52, which adds XMP metadata support. Thanks @null54!
- Updated DDSFileTypePlus plugin to version 1.10.3.
This fixes an issue with saving in the A1R5G5B5, A4R4G4B4, and R5G6B5 formats, and adds support for reading files that use a 'BC7' FourCC. Thanks @null54!
- Fixed: Installations that directly use the MSI (e.g. AD/GPO deployments) no longer need to run the repair process immediately after installation.
Some important DLLs were not being updated because while their assembly version was different, their file version was unchanged, so Windows Installer incorrectly skipped over them.
- Fixed: Loading an image with an enormous photoshop:DocumentAncestors node in the XMP metadata will no longer hang the app
- Fixed a rare crash in the auto-updater UI related to font initialization
- Improved performance when clicking OK on an effect or adjustment dialog that has already completed part of its rendering