2012-10-18 78 views
2

我有这样一个通常的代码:libjpeg:如何获得正确的图像解压缩大小?

struct jpeg_decompress_struct cinfo; 
jpeg_create_decompress(&cinfo); 
jpeg_stdio_src(&cinfo, infile); 
jpeg_read_header(&cinfo, TRUE); 

cinfo.scale_num = ?; 
cinfo.scale_denom = ?; 

needed_width = cinfo.output_width; 
needed_height = cinfo.output_height; 

如何拿起scale_numscale_denum parametrs缩放图像,以GE需要的尺寸。我想要比例缩小一倍。

如果我设置scale_num = 1,scale_denom = 2。其结果是:(1802 X 1237)至(258 X 194)

文档说:

Scale the image by the fraction scale_num/scale_denom. Default is 
1/1, or no scaling. Currently, the only supported scaling ratios 
are 1/1, 1/2, 1/4, and 1/8. 

但是,当我设置这样的比例我没有得到需要的结果。

所以问题是:如何设置scale_numscale_denom到需要得到图像最大尺寸相似。

回答

4

您应该调用jpeg_calc_output_dimensions(cinfo)以获取正确的output_width和output_height值。

计算系数scale_denom我平时做这样的事情:

unsigned int intlog2(unsigned int val) { 
int targetlevel = 0; 
while (val >>= 1) ++targetlevel; 
return targetlevel; 
} 

// .... 
// for example, 
const int width = 5184; 
const int height = 3456; 

unsigned int needed_width = 640; 
unsigned int needed_height = 480; 

unsigned int wdeg = intlog2(width/needed_width); 
unsigned int hdeg = intlog2(height/needed_height); 

unsigned int scale_den = std::min(1 << (std::min)(wdeg, hdeg), 8); 

unsigned int result_width = width/scale_den; 
unsigned int result_height = height/scale_den; 
+0

此代码不会为我工作。 scale_den始终为1. –

+0

什么是您的输入宽度和高度以及needed_width,needed_height? – pogorskiy

+0

3264 x 2448到1024 x 768,结果是1632 x 1224.但是libjpeg可以为这个图像加载例如1224 x 918。 –