问题
Does libjpeg allows/have routines to scale the output image?
I have an image which needs to be resized when saving to and loading from, Providing width1, height1 on input and getting width2, height2 on output, and I really cant use anything outside.
回答1:
Yes, libjpeg does support image scaling, but with some limitations.
Libjpeg version 8c and higher supports M/8 scaling where M is an integer between 1 and 16. The more commonly used libjpeg version 6b supports M of 1, 2, 4, and 8 only (i.e. power-of-2 downscaling).
Supply the scaling numerator and denominator to the decompression object using scale_num and scale_denom. See jpeg_decompress_struct in jpeglib.h. You can refer to djpeg.c for a usage example.
This is much faster, and potentially higher quality, than decoding the whole image and then downscaling.
回答2:
No, you need to scale it either by yourself (linear interpolation is the easiest and fastest but gives square shaped pixels, bilinear/trilinear/bicubic are trickiers but give smoother results), or by using a library that will do the dirty work for you (check OpenCV, SDL, imagemagick, libpipi, etc.)
More on this here, here.
Actual code for a simple nearest neighbor interpolation (unoptimized) :
dest[dx+dy*dest_width] = src[(dx*src_width/dest_width)+(dy*src_height/dest_height)*src_width]
Just iterate dx and dy according to the dest_width and dest_height. But really, use a library for this.
来源:https://stackoverflow.com/questions/7488048/libjpeg-output-scaling