1#include "sick_scan/sick_scan_base.h"/* Base definitions included in all header files, added by add_sick_scan_base_header.py. Do not edit this line. */
40// My main inspiration was Jon Olick's Minimalistic JPEG writer
41// ( https://www.jonolick.com/code.html => direct link is https://www.jonolick.com/uploads/7/9/2/1/7921194/jo_jpeg.cpp ).
42// However, his code documentation is quite sparse - probably because it wasn't written from scratch and is (quote:) "based on a javascript jpeg writer",
43// most likely Andreas Ritter's code: https://github.com/eugeneware/jpeg-js/blob/master/lib/encoder.js
44//
45// Therefore I wrote the whole lib from scratch and tried hard to add tons of comments to my code, especially describing where all those magic numbers come from.
46// And I managed to remove the need for any external includes ...
47// yes, that's right: my library has no (!) includes at all, not even #include <stdlib.h>
48// Depending on your callback WRITE_ONE_BYTE, the library writes either to disk, or in-memory, or wherever you wish.
49// Moreover, no dynamic memory allocations are performed, just a few bytes on the stack.
50//
51// In contrast to Jon's code, compression can be significantly improved in many use cases:
52// a) grayscale JPEG images need just a single Y channel, no need to save the superfluous Cb + Cr channels
53// b) YCbCr 4:2:0 downsampling is often about 20% more efficient (=smaller) than the default YCbCr 4:4:4 with only little visual loss
54//
55// TooJpeg 1.2+ compresses about twice as fast as jo_jpeg (and about half as fast as libjpeg-turbo).
56// A few benchmark numbers can be found on my website https://create.stephan-brumme.com/toojpeg/#benchmark
57//
58// Last but not least you can optionally add a JPEG comment.
59//
60// Your C++ compiler needs to support a reasonable subset of C++11 (g++ 4.7 or Visual C++ 2013 are sufficient).
61// I haven't tested the code on big-endian systems or anything that smells like an apple.
62//
63// USE AT YOUR OWN RISK. Because you are a brave soul :-)