NPS Image Editor 3.1.0 has been released! This release has been long in the making due to a large number of internal improvements that were necessary to support some new features for this release (and new ones going forward) but it includes some significant improvements to the color picker, new color spaces, and new filters.
Get it from nps.nookkin.com as usual, or click Help -> Check for Updates in your existing copy of NPS.
Many users of NPS Image Editor tend to use the color picker on its own – myself included! This release focused on several noteworthy improvements, once again with the goal of making it the best color picker tool you can have for programming or art. Some of the new features include:
- New color spaces including Lab and HCL, described in more detail below
- My Palette, a list of colors you are working on. Add a color from any picker to the Quick Palette and easily access it later; the Recently Used palette automatically tracks colors you've used before.
- Common adjustments including transparency, brightness, channels, triads, and grayscale/invert, all on one page
- Standardized mixer framework which allows all color spaces to be manipulated consistently. Choose a base + 2D plane or a set of 3 sliders, in either a static or dynamic mode.
- Color Resolution Engine improvements including the ability to resolve OLE system colors and a function to determine the most readable text color for a given background
The importance of the color picker as a standalone tool has been highlighted in the "...and Color Picker" part of the product name.
Several new color spaces – Lab, HCL, and XYZ – have been added to the color picker and filters. These are different from the existing color spaces available in that they are absolute &ndash the numeric values mean the same thing no matter what device you are on. That being said, NPS isn't yet aware of your monitor, so the calculated values assume the sRGB color space with a D65 illuminant (fairly standard values).
The XYZ color space was created in 1931 by the International Commission on Illumination based on experiments on how the human eye sees color. It mimics the way the red, green, and blue-sensitive cone cells in the eye function and is essentially the basis of the modern-day RGB color space used by computers.
The Lab color space is a transformation of XYZ into a color-opponent space with one luminance component (L) and two chrominance components (a - red vs green, b - yellow vs blue). It is perceptually uniform which means that a change by some numeric value is perceived to be the same no matter which channel you use.
The HCL color space is a transformation of Lab in cylindrical form, which replaces the color-opponent a and b values with a hue and chominance value. This results in a mixer similar to HSL on the surface, but with the perceptual uniformity benefit of Lab. This is very useful for creating color schemes because a change from yellow to blue on the Hue scale does not noticeably change brightness, unlike HSL where yellow is noticeably brighter than blue despite them having the same numeric brightness value.
Several new filters were added, including Histogram Equalize, Median, Swirl, gamma adjustment, and alpha adjustment. Mixers for Lab, HCL, and xYZ were added and several existing filters (such as Channel Mapper) were updated with these new color spaces as well.
I must admit that the quality of NPS's codebase has never been the greatest, considering that I started working on it before I took a single computer science class (let alone had any knowledge of proper object-oriented design). The 3.1 release, which I have been working on in my spare time over the past 2 years or so, is the beginning of a large code rewrite to clean up the code and make future improvements much easier.
The future of NPS
The 3.1 release aims to continue internal improvements to allow new features to be implemented. These are the features I plan to work on throughout the course of the 3.1 release.
- Layers – probably the most-requested feature to date. I'm about halfway done with the necessary core rewrites to make this possible. This will additionally require me to develop my own custom file format for saving.
- Internationalization for the user interface
- Skinning rewrite to support a more modern Windows 10-compatible appearance
- Scripting with a simple macro language you can use to perform common tasks
- Dynamic UI defined with the aforementioned scripting language, allowing easy customizability