libjpeg output scaling

后端 未结 2 933
灰色年华
灰色年华 2021-01-21 04:39

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 inp

相关标签:
2条回答
  • 2021-01-21 05:29

    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.

    0 讨论(0)
  • 2021-01-21 05:43

    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.

    0 讨论(0)
提交回复
热议问题