IMREAD_ANYCOLOR = 4 // ?, any color
};
-enum { IMWRITE_JPEG_QUALITY = 1,
- IMWRITE_JPEG_PROGRESSIVE = 2,
- IMWRITE_JPEG_OPTIMIZE = 3,
- IMWRITE_JPEG_RST_INTERVAL = 4,
- IMWRITE_JPEG_LUM_QUALITY = 5,
- IMWRITE_JPEG_CHROM_QUALITY = 6,
- IMWRITE_PNG_COMPRESSION = 16,
- IMWRITE_PNG_STRATEGY = 17,
- IMWRITE_PNG_BILEVEL = 18,
- IMWRITE_PXM_BINARY = 32,
- IMWRITE_WEBP_QUALITY = 64
+enum { IMWRITE_JPEG_QUALITY = 1,
+ IMWRITE_JPEG_PROGRESSIVE = 2,
+ IMWRITE_JPEG_OPTIMIZE = 3,
+ IMWRITE_JPEG_RST_INTERVAL = 4,
+ IMWRITE_JPEG_LUMA_QUALITY = 5,
+ IMWRITE_JPEG_CHROMA_QUALITY = 6,
+ IMWRITE_PNG_COMPRESSION = 16,
+ IMWRITE_PNG_STRATEGY = 17,
+ IMWRITE_PNG_BILEVEL = 18,
+ IMWRITE_PXM_BINARY = 32,
+ IMWRITE_WEBP_QUALITY = 64
};
enum { IMWRITE_PNG_STRATEGY_DEFAULT = 0,
CV_IMWRITE_JPEG_PROGRESSIVE =2,
CV_IMWRITE_JPEG_OPTIMIZE =3,
CV_IMWRITE_JPEG_RST_INTERVAL =4,
- CV_IMWRITE_JPEG_LUM_QUALITY =5,
- CV_IMWRITE_JPEG_CHROM_QUALITY =6,
+ CV_IMWRITE_JPEG_LUMA_QUALITY =5,
+ CV_IMWRITE_JPEG_CHROMA_QUALITY =6,
CV_IMWRITE_PNG_COMPRESSION =16,
CV_IMWRITE_PNG_STRATEGY =17,
CV_IMWRITE_PNG_BILEVEL =18,
int progressive = 0;
int optimize = 0;
int rst_interval = 0;
- int lum_quality = 100;
- int chrom_quality = 100;
+ int luma_quality = -1;
+ int chroma_quality = -1;
for( size_t i = 0; i < params.size(); i += 2 )
{
optimize = params[i+1];
}
- if( params[i] == CV_IMWRITE_JPEG_LUM_QUALITY )
+ if( params[i] == CV_IMWRITE_JPEG_LUMA_QUALITY )
{
- lum_quality = params[i+1];
- lum_quality = MIN(MAX(lum_quality, 0), 100);
+ if (params[i+1] >= 0)
+ {
+ luma_quality = MIN(MAX(params[i+1], 0), 100);
+
+ quality = luma_quality;
+
+ if (chroma_quality < 0)
+ {
+ chroma_quality = luma_quality;
+ }
+ }
}
- if( params[i] == CV_IMWRITE_JPEG_CHROM_QUALITY )
+ if( params[i] == CV_IMWRITE_JPEG_CHROMA_QUALITY )
{
- chrom_quality = params[i+1];
- chrom_quality = MIN(MAX(chrom_quality, 0), 100);
+ if (params[i+1] >= 0)
+ {
+ chroma_quality = MIN(MAX(params[i+1], 0), 100);
+ }
}
if( params[i] == CV_IMWRITE_JPEG_RST_INTERVAL )
jpeg_set_defaults( &cinfo );
cinfo.restart_interval = rst_interval;
+
jpeg_set_quality( &cinfo, quality,
TRUE /* limit to baseline-JPEG values */ );
if( progressive )
cinfo.optimize_coding = TRUE;
#if JPEG_LIB_VERSION >= 70
- cinfo.q_scale_factor[0] = jpeg_quality_scaling(lum_quality);
- cinfo.q_scale_factor[1] = jpeg_quality_scaling(chrom_quality);
- if ( lum_quality != chrom_quality )
+ if (luma_quality >= 0 && chroma_quality >= 0)
{
- /* disable subsampling - ref. Libjpeg.txt */
- cinfo.comp_info[0].v_samp_factor = 1;
- cinfo.comp_info[0].h_samp_factor = 1;
- cinfo.comp_info[1].v_samp_factor = 1;
- cinfo.comp_info[1].h_samp_factor = 1;
+ cinfo.q_scale_factor[0] = jpeg_quality_scaling(luma_quality);
+ cinfo.q_scale_factor[1] = jpeg_quality_scaling(chroma_quality);
+ if ( luma_quality != chroma_quality )
+ {
+ /* disable subsampling - ref. Libjpeg.txt */
+ cinfo.comp_info[0].v_samp_factor = 1;
+ cinfo.comp_info[0].h_samp_factor = 1;
+ cinfo.comp_info[1].v_samp_factor = 1;
+ cinfo.comp_info[1].h_samp_factor = 1;
+ }
+ jpeg_default_qtables( &cinfo, TRUE );
}
- jpeg_default_qtables( &cinfo, TRUE );
#endif // #if JPEG_LIB_VERSION >= 70
jpeg_start_compress( &cinfo, TRUE );