1.10.0: -HAM6/HAM8: option to calculate HAM error and color distance in the ICtCp colorspace instead of LAB. ICtCp is newer (2019) than previous LAB-based color distance functions, often produce higher quality output without CIE94 red-orange glitches and is more workable than CIEDE2000. ICtCp can be also enabled in cli mode with "color_ictcp" parameter. -Dynamic Hires: option to exclude first palette color (resulting image will never use the first palette color). -Disabled setting alpha flag when saving to a PCHGF_32BIT format in DymamicHires AGA and Atari 8-bit. -Larger program window, fonts, various ui tweaks. -Code cleanup. 1.9.4: -Added DynamicHires variant with an AGA palette. To enable select mode=Amiga AGA Dynamic HiRes/PCHG software mode. -Implemented PCHGF_32BIT format to be used by DynamicHires AGA and Atari 8-bit ILBM IFF files (using BigLineChanges). DynamicHires OCS uses PCHGF_4BIT (SmallLineChanges) format IFF limited to RGB444. https://wiki.amigaos.net/wiki/ILBM_IFF_Interleaved_Bitmap#ILBM.PCHG was uses as a reference. -Extra EHB palette optimization was renamed extra OCS palette optimization and extended to support also 2/4/8/16/32-color modes (to be extended later). -Acorn Archimedes 256-color mode (out of 4096). 256-color mode is implemented using only 16 color registers producing a very limited and user-unfriendly method of defining color palette. It's a bit like Half-Brite. Modified Extra EHB palette optimization is used to generate palette. Info: https://stardot.org.uk/forums/download/file.php?id=97783&t=1 1.9.3: -Added Oric mode (experimental). Oric was a British 8-bit computer powered by the 6502 cpu with 8-color graphics with no v-sync. Example demo: https://www.youtube.com/watch?v=Rp1WBfoDWpY -Dynamic Hires: cancel option to abort conversion. -rgbg_pal cli parameter can be used to select fixed rgbg ham pattern mode in ham6. -Code cleanup. 1.9.2: -New dithering method available in Amiga modes: Ostromoukhov variable-coefficient error diffusion. Also enable serpentine dithering for best quality. -Sliced HAM6 was updated to support all features of the non-sliced variant including multithreading. -Standalone Atari 8-bit 5-color and 4-color modes (to be expanded later). -Newtronic Video DAC 18 iff saving (experimental) - select mode="HAM8", palette source="Video DAC 18 - fixed 6-bit grayscale", triple/turbo triple mode, enable iff saving, selecting cie94 uses din99 instead of lab. Info: https://amiga.resource.cx/exp/videodac18 -Code cleanup. 1.9.1: -HAM6: experimental extended triple mode checking more modify combinations (you can find it at the bottom of the extra options tab). Helpful on worse palettes. -HAM6: when repeating previous color cycle through modify R/G/B instead of only repeating modify red to minimize fringing when scrolling image (won't affect quality, but it will make iff larger). -Auto-switch to Wu instead of NeuQuant on very small images (<300 pixels total) as they're not supported by NeuQuant and will cause an exception. 1.9.0: -HAM modes: permit starting line with modify operation (modifies border color instead of previous pixel) for better quality. -HAM modes: CIELAB color distance based on CIE76, but instead of Euclidean measure a hybrid approach where a taxicab distance is used between the lightness and the chroma plane. It is listed as hybrid taxicab (name subject to change). -Fixed input image not being reloaded from disk after first conversion. -Additional supported input formats: bmp, tiff, jpeg2000. 1.8.8: -HAM6/HAM8: fixed a bug when converter tended to use HAM modify commands even if it could use a base-color instead (if set and modify produce the same color). If the output image still has background encoded using modify operations most likely the exact background color isn't present in the palette. NeuQuant and Wu often produce slightly altered background color. You can try updating the palette manually (using built-in palette editor or editing pal file in text editor) or switching color quantizer to Median Cut (keep in mind that it's not as advanced as Neuquant or Wu and it may decrease quality). -HAM6: extra ham6 palette optimization can now optionally check all possible 4096 colors. -Added Median Cut quantizer to the Amiga modes as an alternative to NeuQuant and Wu. -Various gui fixes and tweaks. 1.8.7: -Improved fakemode resizing. -HAM8: cleaner output in non-CIE94 mode. -Fixed resizing of transparent images. -Atari8 mode now uses RGB888 instead of RGB444 for internal processing. 1.8.6: -Improved multithreading. -Code cleanup. 1.8.5: -Atari 8-bit 5 colors/line conversion (available in cli mode as "atari8" or in DynamicHires when selecting 5 colors per line). Experimental, based on DynamicHires, saved as 8 color/line iff. -HAM8 turbo triple mode (faster version of triple mode). -DynamicHires turbo accurate mode. -ham6_qX/ham8_qX parameters were updated: ham6_qX where X=0-7 7 ham6_slowest 6 ham6_slow 5 ham6_normal 4 ham6_normal_turbo/ham6_tt 3 ham6_fast 2 ham6_faster 1 ham6_fastest 0 ham6_ludicrous ham8_qX where X=0-4 4 ham8_slowest 3 ham8_slow/ham8_tt 2 ham8_normal 1 ham8_fast 0 ham8_fastest 1.8.4: -HAM6/HAM8: number of used palette colors can be selected (image will only use first X colors, unused palette slots will be filled with last used color) -Batch mode: added batch resizing. -Paletted png saving (_indexed_output.png file) in 2-256-color modes. -Checks-lines dithering available in 2-256-color modes and DynamicHires. -Modified mode list order. -ham6_qX/ham8_qX can be used instead of ham6_normal/ham6/8_fastest etc. ham6_qX where X=0-7 7 ham6_slowest 6 ham6_slow 5 ham6_normal 4 ham6_normal_turbo 3 ham6_fast 2 ham6_faster 1 ham6_fastest 0 ham6_ludicrous ham8_qX where X=0-3 3 ham8_slow 2 ham8_normal 1 ham8_fast 0 ham8_fastest 1.8.3 -EHB minimum enabled palette index selection (image will only use colors from this index). -HAM6/8 raw data map saving (together with a palette file can be used to reacreate the image). -HAM6 turbo triple mode (faster version of triple mode). Also available as a ham6_tt or ham6_normal_turbo cli mode parameter. -HAM6: added bayer 8x8 dithering option (also available as a dither_bayer8x8 cli mode parameter that works in all modes). Useful for converting animations that normally exhibit strong banding in ham6. 1.8.2: -Fixed non-ordered dithering bug (all non-sliced modes). -Added Robotron KC85/4 mode (experimental). 1.8.1.3 -Faster ehb_animation mode. 1.8.1.2 -Higher quality ehb_animation mode. 1.8.1.1 -Fixed a bug affecting non-amiga modes. 1.8.1: -Amiga modes: fixed png saving bug that caused colors to be slightly darker. -Added Amiga OCS 2-color indexed mode (also as a ocs2 in cli mode). -Amiga 2 to 256-color mode plus HAM6: serpentine non-ordered dithering (experimental). -Amiga 2 to 256-color mode: higher precision non-ordered dithering. -Amiga 2 to 256-color mode: fixed CIEDE dithering glitches. -Amiga 2 to 256-color mode: faster bayer 8x8 dithering when CIEDE is also enabled. -Higher quality sliced ham6 conversion. -HAM6, HAM8: faster dual mode. -HAM6 CIE94 set glitch fix. -EHB extra palette optimization can now be disabled for better performance on slower machines. -EHB animation option added to the extra options tab (the same as ehb_animation cli mode). -HAM6 quadruple mode (very slow, experimental). -ZX/C64/Plus4: additional bayer 4x4 dithering option. 1.8.0: -DynamicHires: disabled putting the darkest color to the beginning of the palette - most used color provides better quality. -EHB bug fixes. -ehb_animation cli mode for batch conversion of animation/video frames. It calculates more consistent palettes between frames resulting in more stable video. -New "distributed" and "distributed2" (cielab version) ham6 palette optimization modes offering further reduction of artefacts. -Added image resize tab (experimental). It uses incremental bicubic scaling. -Calculated palette is now sorted darkest to brightest. -Experimental IFF palette import. 1.7.0: -Sliced ham6 now supports pchg iff export (experimental). To enable sliced ham6 use ham6_sliced command line parameter or sliced ham6 mode in the extra options tab. -Fixed sliced ham6 dithering bug. -Less frequent preview refresh when in batch mode to increase conversion speed. -Dither in cli mode now produces less visible ham6 dithering pattern. -ham6_fast in cli mode now uses cie94 instead of cie76 to improve picture quality. -HAM8: reduction of CIE94 glitching. -Experimental temporal checks-line mixed dithering to increase the number of simulated color levels in ham6 batch mode to 61 (slighly below rgb666). To enable use dither_temporal command line parameter. Requires batch mode (.txt source file list) and ham6. Designed to convert animations in cli batch mode. -Experimental reduced visibility "masked" checks-line mixed dithering to make dithering pattern less visible. To enable use dither_masked command line parameter. Requires batch mode (.txt source file list) and ham6. Designed to convert animations in cli batch mode. -Post-conversion screen allowing user to modify iff saving, ham map saving, palette saving, enable opening output image, enable opening source directory. -Extra EHB palette optimization. -Reduced memory usage. -Disabled updating the log in batch mode. Huge batch can overload it with text resulting in eating a lot of memory. -Added nopng cli option to skip png image saving (only iff will be saved). -Added threads_X cli parameter to set CPU thread limit (X=1 to available CPU threads) -Fixed ham6_faster cli option. -Fixed ham8 dual mode gui glitch. -To run ham_convert in cli mode under WSL install Xvfb: https://www.scivision.dev/xvfb-on-windows-subsystem-for-linux/ 1.6.1: -Dynamic Hires: recommended dithering propagation factor is now available as 0%. -Dynamic Hires: improved the following dithering modes - checks, bayer 2x2, bayer 4x4, bayer 8x8. -Amiga indexed modes: improved the following dithering modes - checks, bayer 2x2. -Fakemode: added 1x3 triple height, 3x1 normal and 3x1 triple width variants. After converting to 256-color AGA they can be used on Amiga. -Command line: txt file with a list of input files is now also accepted. Just replace full_image_path with bath_file_path. File extension must be txt. -Command line: new optional parameter quant_wu option enables Wu's color quantizer (usually faster than NeuQuant and often produces better results, enabled by default in non-ham modes). -Command line: additional optional parameters - divesity_X (X values listed below), propagation_X (X values listed below). -Command line: added ham6_slowest (slowest conversion, best quality), ham6_fastest, ham6_ludicrous, ham8_fastest modes. -Updated command line mode info: java -jar ham_convert.jar file_path mode (parameter 3+) (example: java -jar ham_convert.jar C:\img\test.png ham6). If you start the program without "java -jar" it will be launched in the background. Ham6 and ham8 modes support four conversion profiles - normal which offers good best compromise between speed and quality, fast - faster but still producing decent picture quality, fastest - lower quality than and faster than fast, slow - best quality when speed is not important. Parameter 1 - source file path (mandatory): jpg/png/gif image or txt file with one image path per line for bath conversion (unicode console required for diacritic characters). Parameter 2 - mode (mandatory): ham6, ham6_slow (ham6 with normal palette optimizer), ham6_slowest (ham6 with slower palette optimizer), ham6_fast, ham6_fastest, ham6_ludicrous, ham8, ham8_fast, ham8_fastest, ham8_slow, ocs4, ocs8, ocs16, ocs32, ehb, aga64, aga128, aga256, dhires (dynamic hires 16-color per line). Program will be terminated if mode parameter is missing/incorrect or any of the other parameters is incorrect. Parameter 3+ - optional settings: dither (enable Bayer dithering for most modes, Checks for DynamicHires, Checks lines-mixed for ham6), dither_fs (enable Floyd-Steinberg dithering for most modes, Constrained Sierra Lite for DynamicHires, adds additional noise to ham6 that can increase the number of artefacts), norle (disable lossless iff rle compression), normalize (stretch contrast - normalize range to 0-255), black_bkd (force black background color - always set palette color 0 to black), fixed_pal (use fixed palette: 16-level grayscale on ocs, rgb453level+6level grayscale on aga), quant_wu (use Wu's color quantizer instead of NeuQuant), diversity_X (similar color removal strength, X=0-6 for ehb, X=0-9 for other modes, not supported in ham8 and dhires), propagation_X (error propagation factor, requires dither_fs, X=0-100). 1.6.0: -Higher quality CIE94-based YJK conversion. -HAM5: save as 6-plane iff option (better compatibility, suggested by cholok). -HAM6: Alternative "slower" palette optimization mode. -HAM6: substantial reduction of CIE94 glitching. -EHB: increased initial palette size to 96. Added additional analysis step. -Amiga modes: black border (palette index 0) option. -Experimental command line mode: java -jar ham_convert.jar full_image_path mode (param3) (param4) (example: java -jar ham_convert.jar C:\img\test.png ham6). If you start the program without "java -jar" it will be launched in the background. -Parameter 1 - source file path (unicode console required for diacritic characters). -Parameter 2 - mode: ham6, ham6_fast, ham6_slow (ham6 with palette optimizer), ham8, ham8_fast, ham8_slow, ocs4, ocs8, ocs16, ocs32, ehb, aga64, aga128, aga256, dhires (dynamic hires 16-color per line). None specified=ham6 (parameters 3, 4 ignored). Ham6 will also be used if incorrect mode was specified. -Parameter 3+ - optional settings: dither (enable Bayer dithering for most modes, Checks for DynamicHires, Checks lines-mixed for ham6), dither_fs (enable Floyd-Steinberg dithering for most modes, Constrained Sierra Lite for DynamicHires, adds additional noise to ham6 that can increase the number of artefacts), norle (disable lossless iff rle compression), normalize (stretch contrast - normalize range to 0-255), black_bkd (force black background color - always set palette color 0 to black), fixed_pal (use fixed palette: 16-level grayscale on ocs, rgb453level+6level grayscale on aga). 1.5.0: -Fixed dynamichires accurate mode crash bug. -Fixed checks dithering glitch (Amiga indexed modes). -Fixed iff saving bug. -Improved dynamichires non-interlaced image quality. -Amiga indexed modes and dynamic hires: added bayer 2x2, bayer 4x4 and bayer 8x8 dithering (arbitrary-palette version, experimental). Enabling CIEDE makes bayer 8x8 quite slow. Bayer 4x4 and 8x8 supports strength regulation (5-95%, 100%=use recommended value). -Custom mode: added bayer 8x8 dithering. -Experimental MSX2+ screen 12 conversion (19268-color YJK mode). 1.4.0.1: -Fixed incorrect behaviour of the extra ham6 palette optimization. 1.4.0: -HAM8: experimental triple mode (3-pixel combination checking) and LAB mode (CIE76 and CIE94) adapted from HAM6. LAB visibly improves image quality. Triple mode combined with LAB is very slow (minimum 40 minutes for a 720x480 picture using 1 CPU thread). -HAM modes: experimental parallel calculation. Number of CPU threads can be adjusted in the extra options tab. -DynamicHires: fixed non-interlaced image conversion and iff saving. More colorful 8-color and 4-color modes. -Automatic hires/interlace flag setting. 1.3.2: -HAM6: updated LAB mode configuration: earlier normal option was disabled due to inferior quality, aggressive was renamed agressive-CIE76, added aggressive-CIE94 - new variant based on the CIE94 instead of CIE76. CIE94 option is usually more accurate, but sometimes causes glithes in red/orange/brown areas and should be considered experimental. CIEDE2000 was also tested but for now is unsuitable. -HAM6: improved triple mode image quality when not using LAB colorspace, but normal RGB. -DynamicHires: improved checks dithering - higher contrast and saturation. Achieves better quality than other dithering modes and often reduces artefacting. It's still slow with 16 or more colors per line in hires. Speed also depends on a number of colors in each line of the source image (more combinations to check). -Amiga modes: preview tab (under construction). -Credits tab. -Wu's color quantizer by Xiaolin Wu (often performs better than NeuQuant, experimental). -HAM6: early preview of the multipalette HAM6 conversion using DynamicHires palette calculation routines. HAM6 PCHG iff saving does not work yet and there are only very basic gui options. -Removed oversaturation glitch mode - confusing and not very useful. -HAM7 AGA was disabled because it wasn't really possible on real hardware. -JRE11 compatibility fixes. 1.3.1: -HAM6: new "aggressive" LAB mode that distributes error more evenly across 3 consecutive pixels. Produces less artefacts than the previous version. Requires dual mode or triple mode, but triple mode is recommended. Enabled by default. -HAM6: added new palette modes: blank+fixed HAM pattern (RGRG, RGBG on even lines+BGRG on odd lines, fakemode). -HAM6: added normal checks dithering. -Faster LAB HAM6 conversion. -Extra ham6 palette optimization speed tweaks. -Experimental preview of the HAM5 conversion (only dual mode, triple mode runs as a single mode, iff works on Paint.net). -Experimental preview of the HAM7 conversion. -DynamicHires: fixes a small palette editor bug appearing after the first conversion. -Fixed sliced mode crash bug. 1.3.0: -DynamicHires: experimental PCHG IFF export. Supported screen modes: 4, 8, 16, 32, 64-color (EHB)-32 and EHB only in lores on real hardware. -DynamicHires: select replacement colors by measuring how well they maintain vertical color transitions from the source image. Reduces horizontal blockiness. -DynamicHires: user can now define how many colors from the initial common palette will be locked and never changed to reduce blockiness. -DynamicHires: palette editor. -DynamicHires: initial palette generation bug fix. -DynamicHires: more centralized user interface with controls similar to the rest of Amiga modes. -HAM6: alternative error calculation mode using CIELAB colorspace instead of RGB. -Non-HAM Amiga modes, DynamicHires and Custom mode: added checks dithering optimized for indexed color modes. -Fixed non-Windows startup crash bug. 1.2.4: -Amiga modes: additional more aggressive palette generator modes (8, 9). -Amiga modes: fixed error map generation. -HAM map saving: added 3 new operations - set using adjusted palette index (dual/triple mode only), modify red using adjusted value and modify blue using adjusted value (triple mode only). They're modify operations using different value than quantized channel value of the source pixel (-1 or +1) to smoothen difficult color transitions. Adjusted set works in similar manner by using a different palette index. 1.2.3: -HAM6: additional variant of the checks dithering: "lines-mixed" to better simulate the 15-bit color depth in HAM6 with less noticeable dithering pattern despite the horizontal color restrictions and eliminate vertical detail reduction in dark areas. 1.2.2: -Triple mode: faster calculation. Improved set color selection for the first pixel column. -Triple mode: added checking the +1 and -1 modify values in addition to the quantized value from the source image. It was recycled from the failed multi-pixel CIEDE HAM6 experiments from the 2015. It reduces some multi-channel color transitions that are too rapid to be reproduced. Dual mode and its extension (triple mode) are also recycled from these experiments. Checks dithering (normal "dots" version and "lines" variant more suitable for HAM6). Checks dithering is a type of ordered dithering that almost doubles the number of shades per channel by creating one intermediate shade between every two by alternating pixels with these two shades to form a checkerboard. It differs from other ordered dithering methods by its use of only solid colors or a 1:1 mix of two colors in the form of a checkerboard pattern. This makes the dithering less visible and more natural-looking. Checks "lines" variant is designed to better look in the HAM6 mode plagued by horizontal pixel color restrictions (16 palette colors or modification of only one color channel at the same time). Instead of using a checkerboard pattern it operates by alternating shades on successive lines (pixels from different lines are independent in HAM6, they're dependent only in same line). Increases the number of shades per channel from 16 to 31 to form a pseudo-15-bit mode using HAM6. It's also more compressible than the normal checks variant. A modified "lines-mixed" version with less visible pattern and better reproduction of the details in the darkest areas is available in the 1.2.3 beta. -Remaining time estimation. -Palette generator fixes and code optimization. 1.2.1: -HAM8/HAM10 dual mode: optional dual pixel error calculation with forward prediction (similar to the existing HAM6 dual mode). Current pixel's error weight can also be adjusted. -HAM6: triple mode - similar to the dual mode but with three pixels instead of two. That makes it both much slower and more efficient. Always use this option for HAM6 instead of dual mode unless you're really impatient. Dual mode was written to test the viability of the idea to check the combination of multiple pixels instead of just one. HAM modes are unique because every pixel's color is dependent on the color of the last pixel in the same line - you can only modify one of color channel values at once and the other two are copied from the last pixel (modify red, modify green, modify blue operations). The only way to modify all color channels is to use the set operation that inserts one of the defined colors. The number of these colors is very small - only 16 in the HAM6 mode. Both types of operations often cannot accurately render the colors at the edges of an object, because these colors often differ from the background by more than 1 color channel values. Because the possible values of the current pixel are dependent on the value of the previous pixel is it clear that sometimes you can render the current pixel's color slightly better is you've chosen a different operation for the previous pixel. First version - the dual mode operated by checking all possible sequences of ham operations for the two pixels (current and the next one, operations: modify red, modify green, modify blue, set color 0-set color 15). It worked as I expected - it modified the operation one pixel before the rapid color change occurred to better reproduce pixels at the edges with rapid color changes. Apparently a two-pixel sequence is too short to react on the coming rapid color change, so I've made a three pixel version - the triple (pixel) mode. I think that it will be much more useful than the dual mode that was more like a proof-of-concept. -JASC palette file saving. -DynamicHires: Optional more accurate 4096 color search. The darkest color and most common color are never changed to reduce horizontal blocking artefacts. -Various gui tweaks and small bug fixes. Some old options that were surpassed by others in terms of picture quality and reliability were moved to the extra options tab and were labeled as deprecated: sliced option was replaced by DynamicHires, extra HAM6 palette optimization was replaced by triple mode. 1.2.0: -HAM6: use the original color converted to rgb444 instead of the unmodified original color when choosing the ham operation. Provides better color and detail reproduction. -HAM6: optional dual pixel error calculation with forward prediction. SET is used more extensively on sharp edges. This feature is experimental. -DynamicHires and sliced mode: in laced pictures color changes only happen on even lines. -DynamicHires: speed optimizations, 1D dithering was replaced by a better looking constrained Sierra Lite. -All modes: dithering propagation factor selection (5%-100%). -Small bug fixes in the color distance function. -Updated user interface. 1.1.1: -Amiga modes: skip color reduction when the number of colors in the source image does not exceed the target palette size. -Amiga modes: fixed palette (grayscale/rgb 4-5-3-level) or loaded from file can now be a source palette for palette optimizer. -Amiga modes: added HIRES and LACE flags control. -DynamicHires: added hybrid Bayer+Floyd-Steingerg dithering. -Minor fixes in color distance calculation functions. -Small UI update-removed NeuQuant cycles selection. Highest possible quality will be used by default. -Other small bug fixes and speed optimizations. -Cli mode. 1.1.0: -Batch conversion. -Multithreaded HAM6 palette optimization. Attempts to minimize average error by inserting colors from the source image. Unlike previous methods this one performs HAM6 conversion each time to measure how palette modification affects average error. Its more efficient and reliable than CIEDE HAM palette generator but very slow. There is also a turbo switch that reduces source palette to 256 colors prior to calculation for a big speedup with little quality loss. -DynamicHires: ability to change the number of colors replaced every line (1-14 out of 16, default=14). Source palette size for lines>0 increased from 16 to 256-much better picture quality. Added Floyd-Steinberg 75% and Floyd-Steinberg 85% dithering. -Numerous small bug fixes. 1.0.2: -Lots of small fixes mainly in the palette editor. -DynamicHires: conversion rewritten from scratch. Additional dithering modes are also available: Sierra Lite and 1D dithering (a special single-line dithering method suitable for DynamicHires mode). The quality is quite unpredictable for now and it needs further research. -Interlaced mode - splits image into 2 images with odd or even lines only (created for some Arduboy experiments). 1.0.1: -IFF RLE compression. -Additional dithering modes: Sierra Lite, 2-row Sierra, Sierra/3-row Sierra. -Improved the quality of the 4-bit grayscale (16 shades of gray) dithering. Floyd-Steinberg seems to look best. -Added the option to normalize color channel values to 0-255 range. -Oversaturation glitch mode - an alternative method of dithering for HAM6. It is the oldest version that produced corrupted extremely over-saturated images. It's not very useful, but the effect is interesting. -Updated multicolor C64/Plus4 modes with double horizontal pixels. -Various small fixes. 1.0.0: -Updated user interface by adding tabs with log and options. -Added 4, 8, 64, 128-color Amiga indexed modes (including iff saving). -New experimental completely CIEDE-based ham6 conversion algorithm. Set/modify variant is chosen based on the ham error from the current and the next pixel for more efficient error distribution and more regular and less unnatural looking artefacts. It's an early version that can produce some glitches (mostly with bright reds when there are no real reds in the palette). -A simple palette editor to manually adjust palette entries. Useful in reducing ham artefacts (by adding some reds). -Internal palette generator: place the darkest color in the first palette entry (border color). 0.9.7: -Color mapping is now performed using the complex CIEDE2000-based function for a more accurate color reproduction. This color distance function calculates subjectively closest color based on the study of the human perception of colors (better suited for HAM or palettes consisting of a low number of colors or fixed palettes). Due to its subjective nature it's not well suited for dithering and there may be some rare anomalies while using dithering. The older function is also available. -MSX1 screen 2 - 2 colors out of 15 on every 8x1 block. -Faster ZX, C64 and Plus/4 conversion. -4-color Plus/4 modes (slow, experimental). -CIEDE2000 used for color mapping and block palette calculation in ZX, C64, Plus/4 and MSX modes. As described above its not suitable for dithering so the older one is used instead. -Various bug fixes. 0.9.6: -DynamicHires: various tweaks to reduce artefacting. -Color reducer: modes 4 and 5 were duplicated to add the ability to select the source palette size. Modes 5 and 7 start calculation from 2 times bigger palette than modes 4 and 6, but are otherwise the same. Modes 4 and 5 often give the most satisfying results. -NeuQuant cycles regulation. A value of 300 cycles seems to be a good choice for DynamicHires. -Color bit depth reducer: Atkinson dithering replaced with Bayer (ordered). -Write ham map option now also generates a second map. It is a grayscale image representing the ham errors. Bright shades represent higher errors. -Commodore Plus/4 hires conversion (2 colors per 8x8 block or 8x2 in fli mode, 121-color palette). -Faster C64 multicolor conversion. 0.9.5: -New higher quality (and much slower) palette generator for ham6, 16 and 32-color ocs modes. It uses multiple iterations to make palette more diverse and eliminate colors that are too similar. It was designed mainly with ham6 in mind but can be used in other modes. Possible modes: 0 (legacy), 1 (safest) - 5 (most aggressive). Mode 0 is a fast single-iteration mode present in previous versions that is better suited for slower computers. Multi-iteration modes: 1-safest that doesn't look great but always gives acceptable results with no side-effects. Other modes eliminate some very similar colors from a bigger palette to make palette more diverse and make room for colors of smaller details that wouldn't normally appear in the palette. Mode 5 is the most aggressive and should be used with caution because it eliminates more colors than other mores and it can make the resulting picture look unnatural. -EHB palette generator: fixed a few minor bugs. -Status information during the conversion. 0.9.4: -Error calculation and color hack were heavily modified to improve the sharpness of the image are to preserve more details in some scenarios. The new version should perform better but there can be a few situations when the user may prefer the older algorithm. Color hack switch when disabled switches the program to the older version of the HAM conversion algorithm. 0.9.3: -EHB conversion should now work better on more colorful images, but it will take longer depending on the image's complexity. The half-brite conversion algorithm is actually comparable to HAM in terms of complexity. 0.9.2: -IFF saving is now available in all standard Amiga modes (excluding sliced and HAM10). -Internal palette generator should now generate more unique colors in OCS modes, but it will take a little longer. -New experimental EHB palette generator. The old one was very primitive and almost always produced pictures with less than 64 unique colors. Due to the nature of the used algorithms not all pictures will look good, especially very colorful low contrast pictures. It's an early version that requires further research and testing. 0.9.1: -IFF saving: small bug fixes. -All OCS modes: speed optimisations. -Custom mode: added color reduction method selection. 0.9.0: -HAM6: added IFF saving. IFF files have been tested with IrfanView, XnView and Deluxe Paint 5 on WinUAE. IrfanView decodes ocs color levels as 0,16,32,…,240 instead of 0,17,34,…,255. This makes images a bit darker. -HAM8: added IFF saving. -Code cleanup and small bugfixes. 0.8.4: -Added a new type of fakemode - 1x1. It's just a single pixel variation of the existing 1x3 pixel fakemode. It retains more detail at the cost of some color fringing. The user can choose a version that produces a more acceptable result. -Added the ability to produce a HAM map that illustrates what type of operation was used on every pixel. It was used internally for debugging. Here's a legend: -Black - SET. -Red - Modify red (this operation is also used when the current pixel's color is the same as the last one's, but different from any color of the base palette). -Green - Modify green. -Blue - Modify blue. -Fixed some UI glitches. 0.8.3: -DynamicHires: added a Bayer dithering option. The resulting image will be slightly brighter masking some of the per-line palette variations. -DynamicHires: a new option (RPT) that enables using the same palette in up to 4 consecutive horizontal lines to reduce artefacting. -Added a Custom mode - 4-256 colors from 3-24-bit colorspace. Warning: when using a colorspace other than a 24-bit RGB the number of colors in the resulting image may be lower than the desired number of colors. Color reduction functions (from the java advanced imaging library) tend to produce colors outside the colorspace of the source image (if it wasn't 24-bit RGB). Converting the resulting palette back to the target colorspace often results in the presence of a few duplicated colors. When converting from 24-bit RGB to for example 12-bit there are only 16 levels for each channel instead of 256. After rounding to these 16 levels a few colors will get the same color values due to a lower precision of the target colorpace. -Internal palette generator: code cleanup, speed optimizations. 0.8.2: -DynamicHires: fired regression in the error calculation function. 0.8.1: -DynamicHires: 3 lines (last+current+next) are now used to calculate the palette for every line. This method produces cleaner pictures with less artefacts (it doesn't look that much sliced). -Fakemode now uses a different pattern like in Unreal by Future Crew. Pseudo-subpixel arrangement on every column is now different. One source pixel is translated into 3 pixels on every column. First column - RGB, second - BRG, third - GBR, fourth - RGB, etc. Lower vertical resolution is a bit less noticeable, and it looks more natural even on lcd screens. -Small usability fixes. 0.8.0: -New internal palette generator using the Java Advanced Imaging library. NeuQuant was chosen due to its higher quality compared to other color reduction methods like median-cut. -Added the Jarvis, Judice, and Ninke dithering option. This method is more complex than Floyd-Steinberg, but produces much smoother output. -HAM6 now supports dithering, but it may cause more artefacts. -Sliced HAM modes - different palette every line for better color reproduction and less HAM artefacts. -Sliced indexed modes (16-256 colors every line). -Dynamic HiRes mode (sliced 16 color mode) - every line has its own 16 color palette. On pre-AGA Amigas this software mode allowed displaying more than 16 colors in high resolution modes that didn't support HAM and more than 16 colors at once. This mode is experimental and quite problematic to code, because typical color reduction algorithms produce varied results when applied to a one pixel slice of the image. Every line often gets a palette that varies too much from the previous line (there are just 16 colors for every line) leading to a sliced vertically inconsistent image. You can select 1 to 4 of the available algorithms: Oct-tree, median-cut, NeuQuant, pseudo-random. The method with the lowest error will be determined every line. -YUV HAM10 prototype. Just an experiment to see what will happen if we adapt the HAM mode to the YUV colorspace instead of the RGB. HAM10 was the easiest to adapt, because it stores the channel data without modification. SET operation is not supported yet. Apparently YUV HAM works well without it because this mode can modify the Y (brightness) component in single operation. -Improved backgroung color selection on 4-color per 8xX block modes (every block has 3 colors out of 16 plus a shared background color for the whole screen). -Sharp X68000 16-bit hicolor mode from the 1988 (added as an upgrade to the 1987 model). Unlike the regular 16-bit hicolor (with 5 bits for red, 6 bits for green and 5 bits for blue channel) this one has 6 bits per channel. One bit defines a shared 6th bit on all channels. It looks worse than a normal 16-bit hicolor but still better than 15-bit hicolor. This mode supported resolutions up to 512x512. It was introduced in 1988 just 3 years after Amiga's 4096-color HAM6 (360x576 max.). 0.7.2: -ZX and C64 modes: bayer dithering now uses 4x4 matrix. -Fakemode: more precise color calculation. -New color bit depth reducer. Supports any combination of 1 to 8 bits per channel with optional dithering. It's not just a simple rounding. It calculates the closest target level that produces minimal error. This results in less grainy dithering and better quality at any bit dept. 0.7.1: -Atkinson dithering is now available in Amiga modes. This method originates from the oldest Mac computers. Provides better contrast and a classic Mac look, but very bright and very dark areas may become washed out. -Amiga OCS: Changed the fixed base palette option to use 4-bit (16 level) grayscale. Use a custom optimized palette option for the maximum quality. -Amiga AGA: Changed the fixed base palette option to use 4-5-3 level RGB with additional 4 levels of gray (6 total). Creating this palette was just an experiment but it produces much better results in the HAM8 mode than the previous 6-bit RGB. It's also bundled as a separate pal file so that anyone can use it outside the application. It can be used in realtime RGB to HAM8 conversion where there in no time to calculate a new palette every frame. Optimized palette option gives the best results but this one is quite good for a fixed palette. -Fixed quite a few bugs. 0.7.0: -Amiga HAM modes: Color hack now uses a new color error formula (3xred+4xgreen+2xblue). It produces better results with well calculated base palettes. The old one (2xred+3xgreen+1xblue) was useful in the first versions when there was no way to use a better base palette than a crappy 6-bit RGB. With better palettes the blue component appeared washed too much. -Added the VGA fakemode (fake 18-bit mode) used around 1995 in scene demos to create a illusion of more than 256 colors at once on a standard VGA card. It was explained in the earlier post. -Added the experimental (and very slow) C64 hires modes. There are 2-color and 4-color per 8x8, 8x1 or 8x2 block variants. 2-color modes were developed by modifying earlier ZX modes. They simulate C64 hires and (partially) fli modes. 4-color modes use any 3 colors out of 16 and a background color shared among the screen (like lores multicolor C64 modes). The background color is 50% gray. I will add background color selection in the future. 4-color modes are partially based on software C64 modes like nufli. It's an early version and it will be improved to fully match various C64 software modes. The C16/Plus4 modes are also in development due to their big 121-color palette. -A few speed optimisations. 0.6.1: -Fixed Floyd-Steinberg dithering in ZX modes. It should be much less blocky. -Added ZX Spectrum 8x2 mode (8x2 pixel attributes). -Added Bayer ordered dithering. It's more easier to use in ZX modes than Floyd-Steinberg, because it operates on a single pixel without analysing the rest of the image. ZX Spectrum 2-color per attribute limit makes implementing Floyd-Steinberg dithering quite problematic, because it's only possible to distribute error to nearby attributes that have the same palette. That's not a problem with Bayer dithering due to lack of error distribution. -Added choosing what palette to use with the ZX conversion (bright0, brigth1 or both of them). -ZX modes are still experimental and need more work. Bayer dithering seems to look better with only half of the palette (bright0 or bright1). 0.6.0: -Added HAM-6 mode - 2 control bits+4 bits of data, 16-color palette, 12-bit color space (Amiga OCS/ECS). -Added HAM-10 mode - 2 control bits+8 bits of data, 256 color palette, 24-bit color space (unfinished Amiga AAA). For comparison HAM-8 uses 2 control bits+6 bits of data, 64 color palette, 24-bit color space. -Added 32-color indexed mode - 32 colors out of 4096 (Amiga OCS/ECS). -Added 64-color EHB (Extra Half-Brite) mode - 32 colors+the same 32, but with halved brightness out of 4096 colors (Amiga OCS/ECS). -Added ZX Spectrum mode - 15 colors divided into two palettes: bright1 and bright0. Two colors per 8x8 pixel block, both from bright1 or both from bright0. -Added ZX Spectrum 8x1 mode available in some ZX Spectrum clones like Timex Sinclair, Pentagon and SAM Coupé (take a look at the Lyra 3 Megademo for the SAM Coupé). This mode uses a 8x1 pixel block size to improve the color resolution. The rest is the same as in normal mode. -Improved the user interface for better clarity. -Fixed a few bugs. -Added a few additional sample palette files. The most important is the default EHB palette used by the Deluxe Paint IV that can be used in the EHB mode. There is also a 256-color palette consisting of a 6-8-5 level RGB with 16 spare palette entries filled with shades of gray. Black and white was already used so I calculated a 18-level grayscale, skipped black and white and put the remaining 16 shades on the spare palette entries. 0.5.0: -Added a simple build-in palette generator to produce a better base palette for HAM8 conversion. -Added a new 256-color mode, which converts the image to a normal indexed 256-color mode. -Floyd-Steinberg dithering can be used with the 256-color mode. -Added an option to load a 256-color palette from a file in the JASC pal format (256 colours are used in 256-color mode, HAM8 uses only the first 64 colours). This option enables the user to load an optimized 64-color palette to greatly improve the quality of the HAM8 conversion. External programs (like IrfanView) have much better colour reduction algorithms than the build-in one. If you want a high-quality HAM8, you can reduce the number of colours of your image to 64 in IrfanView using the new high-quality option, export the resulting 64-color palette to a file and load to it my program. -Improved the user interface. -Fixed some bugs. -There are some sample palettes included: Amstrad CPC, Apple II, Atari 2600, Atari 8-bit, Commodore 16/Plus4, Commodore 64, Commodore 64 DTV, Commodore VIC20, CGA, Grayscale (4-bit), NES, RGB222 (EGA), RGB332 (MSX2), SAM Coupé, ZX Spectrum. These palettes when used in 256-color mode with enabled dithering could be used to approximate the graphic capabilities of these old computers (with the exception of the colour restrictions often present in their screen modes). 0.4.0: -Colorspace conversion algorithm is now much more precise. Earlier version was crude and resulted in some nasty artefacts. For example choosing SET colour from 6-bit RGB base palette (just 4 shades per component!) was almost always choosing darker shade. It was a temporary hack to eliminate some other artefacts. The new method is still not perfect. If the picked colour is lighter than the original it sometimes produces a few much too light pixels. -Error calculation used to choose operation (SET, Modify Red, Modify Green, Modify Blue) is modified to use weighted sum based on sensitivity of the human eye to each of the primary colours: 2*error_red+3*error_green+1*error_blue. A human eye has the highest sensitivity to green and the lowest to blue. It also eliminated much of the artefacts at the edges of the each object. Most of the ugly areas of more of less random colours at the edges are now just a mild blue-violet glows which are much less noticeable. There were also some less important bugs in this algorithm. 0.3.0: I’ve been recently developing a freeware java-based image converter that converts bitmaps to HAM8-like screen mode available on old Commodore Amiga computers (Amiga 1200 and 4000). It’s a very early version but the resulting image looks quite OK. There’s a room for further optimizations as the current conversion algorithm is quite basic. For example it uses fixed 64-color base palette (RGB 2:2:2). IFF saving is yet not implemented.