- Go to Settings → Load format settings… → Read.
- Set DCT to Floating.
- Set Dithering to None.
- Convert a JPEG to PNG.
- Repeat the conversion with Dithering = Ordered.
- Repeat the conversion with Dithering = Floyd-Steinberg.
[v1.104] JPEG decoding with dithering
Moderator: xnview
-
XnTriq
- Forum Librarian
- Posts: 6563
- Joined: Sun Sep 25, 2005 3:00 am
- Location: Ref Desk
[v1.104] JPEG decoding with dithering
-
Xn User
- Posts: 279
- Joined: Sat Jan 05, 2019 1:16 pm
Re: [v1.104] JPEG decoding with dithering
Which method compression in JPEG file was be used ? This very need for report , I mean what 1x1 1x1 1x1 or 1x2 1x1 1x1 or 2x2 1x1 1x1 )
And test was be do with classic JPEG compression methods or JPEG LI compression methods ?
And test was be do with classic JPEG compression methods or JPEG LI compression methods ?
-
XnTriq
- Forum Librarian
- Posts: 6563
- Joined: Sun Sep 25, 2005 3:00 am
- Location: Ref Desk
Re: [v1.104] JPEG decoding with dithering
Encoder: libjpeg
Chroma subsampling: 4:2:0 (2×2,1×1,1×1)
Chroma subsampling: 4:2:0 (2×2,1×1,1×1)
You do not have the required permissions to view the files attached to this post.
-
xnview
- Author of XnView
- Posts: 47743
- Joined: Mon Oct 13, 2003 7:31 am
- Location: France
Re: [v1.104] JPEG decoding with dithering
if i check the code of libjpeg, it seems that dithering is only used when quantize with colormapXnTriq wrote: Mon Mar 10, 2025 2:30 am testorig.jpg
Encoder: libjpeg
Chroma subsampling: 4:2:0 (2×2,1×1,1×1)
Pierre.
-
Xn User
- Posts: 279
- Joined: Sat Jan 05, 2019 1:16 pm
Re: [v1.104] JPEG decoding with dithering
Right , Dithering must be do use only for 1x2 1x1 1x1 or 2x1 1x1 1x1 or 2x2 1x1 1x1 , for 1x1 1x1 1x1 dithering not need use )
I also asked in JPEGLi https://github.com/libjxl/libjxl/issues/4146 , you can see what XnView MP and ACDSee Pro 5.0 with IDE_ACDstd 5.0.56.0000 reading file with differ , in result XnView MP with Floyd-Steinberg colors a little rude if compare with ACDSee Pro , I see rude gradients
I also asked in JPEGLi https://github.com/libjxl/libjxl/issues/4146 , you can see what XnView MP and ACDSee Pro 5.0 with IDE_ACDstd 5.0.56.0000 reading file with differ , in result XnView MP with Floyd-Steinberg colors a little rude if compare with ACDSee Pro , I see rude gradients
-
Xn User
- Posts: 279
- Joined: Sat Jan 05, 2019 1:16 pm
Re: [v1.104] JPEG decoding with dithering
Please , add all this algorithms https://surma.dev/things/ditherpunk/ and will be learn which is better
In the end will better if this algoritms will be apply optionaly to all lossy or images with less colors
this for testing methods of dithering https://surma.dev/lab/ditherpunk/lab.html
In the end will better if this algoritms will be apply optionaly to all lossy or images with less colors
this for testing methods of dithering https://surma.dev/lab/ditherpunk/lab.html
-
XnTriq
- Forum Librarian
- Posts: 6563
- Joined: Sun Sep 25, 2005 3:00 am
- Location: Ref Desk
-
user0
- XnThusiast
- Posts: 2922
- Joined: Sat May 09, 2015 9:37 am
Re: [v1.104] JPEG decoding with dithering
yep,xnview wrote: Mon Mar 10, 2025 7:20 am if i check the code of libjpeg, it seems that dithering is only used when quantize with colormap![]()
- Color quantization [legacy feature]
is an optional post-decoding step that maps full-color pixel data to a limited palette
- Dithering [legacy feature]
is an optional component of color quantization that introduces structured noise to mask quantization errors, reduce visible artifacts such as banding and improve perceived color transitions
- Dithering [legacy feature]
- Dithering combobox in Settings>Formats>Read - JPEG
- -dither fs switch when lib is used internally
Some details
Doc
it is clearly written in DJPEG DETAILS section of usage.txt
"Note that these switches (-dither) have no effect unless color quantization is being done."
- libjpeg
https://www.ijg.org/files/jpegsr10.zipCode: Select all
-colors N Reduce image to at most N colors. This reduces the or -quantize N number of colors used in the output image, so that it can be displayed on a colormapped display or stored in a colormapped file format. For example, if you have an 8-bit display, you'd need to reduce to 256 or fewer colors. (-colors is the recommended name, -quantize is provided only for backwards compatibility.)Code: Select all
-dither fs Use Floyd-Steinberg dithering in color quantization. -dither ordered Use ordered dithering in color quantization. -dither none Do not use dithering in color quantization. By default, Floyd-Steinberg dithering is applied when quantizing colors; this is slow but usually produces the best results. Ordered dither is a compromise between speed and quality; no dithering is fast but usually looks awful. Note that these switches have no effect unless color quantization is being done. Ordered dither is only available in -onepass mode.
- libjpeg-turbo
https://github.com/libjpeg-turbo/libjpe ... /usage.txtCode: Select all
-colors N Reduce image to at most N colors [legacy feature]. or -quantize N This reduces the number of colors used in the output image so that it can be stored in a colormapped file format. This feature cannot be used when decompressing lossless JPEG images. (-colors is the recommended name. -quantize is provided only for backward compatibility.)Code: Select all
-dither fs Use Floyd-Steinberg dithering when quantizing colors [legacy feature]. -dither ordered Use ordered dithering when quantizing colors [legacy feature]. -dither none Do not use dithering when quantizing colors [legacy feature]. By default, Floyd-Steinberg dithering is applied when quantizing colors. This is slower but usually produces the best results. Ordered dithering is a compromise between speed and quality. No dithering is faster but usually looks awful. Note that these switches have no effect unless color quantization is being done. Ordered dithering is only available in -onepass mode.
Code
dither_mode is ignored if quantize_colors is false
| Step | Code File | Action |
|---|---|---|
| Parsing | djpeg.c | captures -dither and -colors flags |
| Master Control | jdmaster.c | sees quantize_colors == TRUE; enables the quantizer |
| Processing | jquant*.c | checks cinfo->dither_mode to decide which math loop to run (1or2 pass) |
| Output | wr*.c | writes the dithered, low-color pixels to a BMP/GIF/PPM file |
Test
- get libjpeg-turbo binary
- decode jpeg
- default output
Note: by default the following applied as well:
Code: Select all
djpeg.exe -bmp -outfile test_0.bmp test.jpg
-dct int
chroma fancy upsampling
- add dithering
Code: Select all
djpeg.exe -bmp -dither fs -outfile test_1_dither_fs.bmp test.jpg
- default output
- compare
default vs dithering - images are the same
ps: hope this is enough to discourage this ignorant behavior