Code Comments
Programming Forum and web based access to our favorite programming groups.JPEG Group has a utility called "jpegtran" which can rotate and mirror JPG pictures without quality loss. An online version of this application can be found here: http://sylvana.net/jpeg-lab.html I know how to arrange the quantization tables and DCTs in a JPG file to swap the top-right and lower-left corner of a picture, but I can not figure out how to do any other lossless rotate and mirror functions. I am looking for the algorithms that make these other manipulations possible. I do not know C well enough to understand JPEG Group's source code, and would prefer an explanation in plain english. Any help would be appreciated. Thanks. -korejwa
Post Follow-up to this messageOn Sat, 18 Sep 2004, Korejwa wrote: > I know how to arrange the quantization tables and DCTs in a JPG file to > swap the top-right and lower-left corner of a picture, but I can not > figure out how to do any other lossless rotate and mirror functions. > > I am looking for the algorithms that make these other manipulations > possible. I do not know C well enough to understand JPEG Group's source > code, and would prefer an explanation in plain english. If you know how you mirror horizontally, vertically and across the diagonal axis you can also rotate in 90° steps. Suppose that you have the DCT coefficients available as coeff(i,j) for i,j=0..7, i being "the x frequency" and j being the "y frequency" Mirroring at the diagonal axis: new_coeffs(i,j) = coeff(j,i) Swapping left/right: new_coeffs(i,j) = coeffs(i,j) * sign_adjust1(i,j) where sign_adjust(i,j) is 1 for even i and -1 for odd i Swapping up/down is similar to swapping left/right except that sign_adjust depends on j 90° clockwise rotation would be - swap at diagonal axis - swap left/right 90° counter clockwise rotation would be - swap at diagonal axis - swap up/down The elements of the quantization tables have to be swapped in the same way. Now the only thing left is to encode your file. > Any help would be appreciated. Thanks. > > -korejwa HTH, Sebastian -- PGP-Key-ID (long): 572B1778A4CA0707
Post Follow-up to this messageThanks a million Sebastian! I've put quite a few hours into this, and I'm now able to do all the possible transforms based on the information you've given me. I can't thank you enough! -korejwa On Sat, 18 Sep 2004 14:37:35 +0200, Sebastian Gesemann <isnt@valid.net> wrote: > On Sat, 18 Sep 2004, Korejwa wrote: > > > If you know how you mirror horizontally, vertically and across the > diagonal axis you can also rotate in 90° steps. > > Suppose that you have the DCT coefficients available as > coeff(i,j) for i,j=0..7, i being "the x frequency" and > j being the "y frequency" > > Mirroring at the diagonal axis: > new_coeffs(i,j) = coeff(j,i) > > Swapping left/right: > new_coeffs(i,j) = coeffs(i,j) * sign_adjust1(i,j) > where sign_adjust(i,j) is 1 for even i and -1 for odd i > > Swapping up/down > is similar to swapping left/right except that sign_adjust > depends on j > > 90° clockwise rotation would be > - swap at diagonal axis > - swap left/right > > 90° counter clockwise rotation would be > - swap at diagonal axis > - swap up/down > > The elements of the quantization tables have to be swapped in > the same way. Now the only thing left is to encode your file. > > > > > HTH, > Sebastian > > -- > PGP-Key-ID (long): 572B1778A4CA0707 >
Post Follow-up to this message
Show a Printable Version
Email This Page to Someone!
Receive updates to this thread
Powered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.