How do I load jpg files?

Started by
1 comment, last by SnpProgrmr 24 years, 8 months ago
For loading Jpegs you should use
the free JPEGLib. If you want to be
able to load JPEG's in a DirectDrawSurface, then you can check my Homepage, where you
can download such a DDSample with Source:
URL is http://cust.nol.at/ppee

nik

Advertisement
Like the title states, how do I load jpg files? I'm not sure how the compression works. If X pixels have Y bytes each, then how can commpress that kinda necessary data?
Well I'd agree with virtualnik about JPEGlib. With one caveat. It's quite often helps to make a simple little layer to provide just the functions you need to your program. jpeglib.h defines quite a lot of stuff that is usualy more complicated(but virsatile) than you need.


As to your queantion about how compression works, here's a brief overview. Not enough info to write a compressor but enough to see how it could work

The first fundimental way to compress anything is to encode patterns. Any data that has a pattern can be compressed by encoding the pattern rather than the raw data.

The next part is to frequency compress the data. Frequency Compression is like morse code. Common Symbols like e(.) and a(.-) have shorter encodings than Less common ones like q(--.-) and x (-..-) Huffman compression and Arithmetic compression perform frequency based compression. Typically the data produced after a pattern encoding compression system can be passed through a frequency encoder to gain futher compression.

Things like Zip use the two methods above.

There is one more part common in compression is to have some form of encoder that turns the data into another form of data by some reversable process. The object of the conversion is to make the new form of data more compressable than the old.
JPEG uses a DCT(Decrete Cosine Transfomation) to turn the data into a set of Frequency Coefficients. Pictures typically contain a lot of low frequncy information (High frequency parts in the pictures are the sharp lines, The low frequency parts are the smooth colour and brightness graduations). Tunting that picture into frequency information means the high frequency data is either zero or close to zero. The frequency data can compress better than the original data. This is how JPEG works when in lossless mode.

Many transformations (DCT included) have the additional feature of allowing the data to be quantized. If you throw some of the transformed data away, when you reverse the transformation you get something that is still quite close to the original data.
When you quantize the data after a DCT transformation, the resulting data compresses extremely well since a great deal of it is zero.

In addition, JPEG converts the RGB information into YCrCb (Luminance ChangeRed ChangeBlue). The human eye is _far_ more sensitive to brightness then it is to colour. This enables the Quantization of the data to be much more severe because we are much less likely to notice errors in the colour of the image.

While throwing away data initially seems like an horrific idea, JPEGs do it all the time and don't do too badly. Newer transformations like wavelets enable even better compression. The JPEG2000 specification includes wavelet compression.

[This message has been edited by Lerc (edited August 14, 1999).]

-That which does not kill us has made its last mistake.

This topic is closed to new replies.

Advertisement