#include "_highgui.h"
#include "utils.h"
+#if defined WIN32 && defined _MSC_VER && _MSC_VER >= 1200
+#if defined WIN64 && defined EM64T
+ #ifdef _DEBUG
+ #pragma comment(lib, "libjasperd_64.lib")
+ #pragma comment(lib, "libjpegd_64.lib")
+ #pragma comment(lib, "libpngd_64.lib")
+ #pragma comment(lib, "libtiffd_64.lib")
+ #pragma comment(lib, "zlibd_64.lib")
+ #else
+ #pragma comment(lib, "libjasper_64.lib")
+ #pragma comment(lib, "libjpeg_64.lib")
+ #pragma comment(lib, "libpng_64.lib")
+ #pragma comment(lib, "libtiff_64.lib")
+ #pragma comment(lib, "zlib_64.lib")
+ #endif
+#elif !defined WIN64
+ #ifdef _DEBUG
+ #pragma comment(lib, "libjasperd.lib")
+ #pragma comment(lib, "libjpegd.lib")
+ #pragma comment(lib, "libpngd.lib")
+ #pragma comment(lib, "libtiffd.lib")
+ #pragma comment(lib, "zlibd.lib")
+ #else
+ #pragma comment(lib, "libjasper.lib")
+ #pragma comment(lib, "libjpeg.lib")
+ #pragma comment(lib, "libpng.lib")
+ #pragma comment(lib, "libtiff.lib")
+ #pragma comment(lib, "zlib.lib")
+ #endif
+#endif
+#endif
+
#define SCALE 14
#define cR (int)(0.299*(1 << SCALE) + 0.5)
#define cG (int)(0.587*(1 << SCALE) + 0.5)
CvMat srcstub, *src;
CvMat dststub, *dst;
- int src_cn, swap_rb = flags & CV_CVTIMG_SWAP_RB;
+ int src_cn, dst_cn, swap_rb = flags & CV_CVTIMG_SWAP_RB;
CV_CALL( src = cvGetMat( srcarr, &srcstub ));
CV_CALL( dst = cvGetMat( dstarr, &dststub ));
src_cn = CV_MAT_CN( src->type );
+ dst_cn = CV_MAT_CN( dst->type );
if( src_cn != 1 && src_cn != 3 && src_cn != 4 )
CV_ERROR( CV_BadNumChannels, "Source image must have 1, 3 or 4 channels" );
if( !CV_ARE_DEPTHS_EQ( src, dst ))
{
- double scale = 0, shift = 0;
int src_depth = CV_MAT_DEPTH(src->type);
- temp = cvCreateMat( src->height, src->width,
- (src->type & CV_MAT_CN_MASK)|(dst->type & CV_MAT_DEPTH_MASK));
- scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255;
- shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0;
- cvConvertScale( src, temp, scale, shift );
- src = temp;
+ double scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255;
+ double shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0;
+
+ if( !CV_ARE_CNS_EQ( src, dst ))
+ {
+ temp = cvCreateMat( src->height, src->width,
+ (src->type & CV_MAT_CN_MASK)|(dst->type & CV_MAT_DEPTH_MASK));
+ cvConvertScale( src, temp, scale, shift );
+ src = temp;
+ }
+ else
+ {
+ cvConvertScale( src, dst, scale, shift );
+ src = dst;
+ }
}
+ if( src_cn != dst_cn || src_cn == 3 && swap_rb )
{
uchar *s = src->data.ptr, *d = dst->data.ptr;
int s_step = src->step, d_step = dst->step;
- int code = src_cn*10 + CV_MAT_CN(dst->type);
+ int code = src_cn*10 + dst_cn;
CvSize size = { src->cols, src->rows };
if( CV_IS_MAT_CONT(src->type & dst->type) )
icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb );
break;
case 33:
- if( swap_rb )
- icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
+ assert( swap_rb );
+ icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
break;
case 41:
icvCvt_BGRA2Gray_8u_C4C1R( s, s_step, d, d_step, size, swap_rb );
default:
CV_ERROR( CV_StsUnsupportedFormat, "Unsupported combination of input/output formats" );
}
-
- if( code != 33 || swap_rb )
- src = dst;
+ src = dst;
}
if( flags & CV_CVTIMG_FLIP )