+ src->pub.init_source = wx_init_source;
+ src->pub.fill_input_buffer = wx_fill_input_buffer;
+ src->pub.skip_input_data = wx_skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
+ src->pub.term_source = wx_term_source;
+}
+
+static inline void wx_cmyk_to_rgb(unsigned char* rgb, const unsigned char* cmyk)
+{
+ register int k = 255 - cmyk[3];
+ register int k2 = cmyk[3];
+ register int c;
+
+ c = k + k2 * (255 - cmyk[0]) / 255;
+ rgb[0] = (unsigned char)((c > 255) ? 0 : (255 - c));
+
+ c = k + k2 * (255 - cmyk[1]) / 255;
+ rgb[1] = (unsigned char)((c > 255) ? 0 : (255 - c));
+
+ c = k + k2 * (255 - cmyk[2]) / 255;
+ rgb[2] = (unsigned char)((c > 255) ? 0 : (255 - c));
+}
+
+// temporarily disable the warning C4611 (interaction between '_setjmp' and
+// C++ object destruction is non-portable) - I don't see any dtors here
+#ifdef __VISUALC__
+ #pragma warning(disable:4611)
+#endif /* VC++ */