func setupDecoderOptions(dinfo *C.struct_jpeg_decompress_struct, opt *DecoderOptions) { tw, th := opt.ScaleTarget.Dx(), opt.ScaleTarget.Dy() if tw > 0 && th > 0 { var scaleFactor int for scaleFactor = 1; scaleFactor <= 8; scaleFactor++ { if ((scaleFactor*int(dinfo.image_width)+7)/8) >= tw && ((scaleFactor*int(dinfo.image_height)+7)/8) >= th { break } } if scaleFactor < 8 { dinfo.scale_num = C.uint(scaleFactor) dinfo.scale_denom = 8 } } dinfo.dct_method = C.J_DCT_METHOD(opt.DCTMethod) if opt.DisableFancyUpsampling { dinfo.do_fancy_upsampling = C.FALSE } else { dinfo.do_fancy_upsampling = C.TRUE } if opt.DisableBlockSmoothing { dinfo.do_block_smoothing = C.FALSE } else { dinfo.do_block_smoothing = C.TRUE } }
func setupEncoderOptions(cinfo *C.struct_jpeg_compress_struct, opt *EncoderOptions) { C.jpeg_set_quality(cinfo, C.int(opt.Quality), C.TRUE) if opt.OptimizeCoding { cinfo.optimize_coding = C.TRUE } else { cinfo.optimize_coding = C.FALSE } cinfo.dct_method = C.J_DCT_METHOD(opt.DCTMethod) }