2012-10-18 114 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。 –