X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=otherlibs%2Fhighgui%2Futils.cpp;fp=otherlibs%2Fhighgui%2Futils.cpp;h=c5b48ff919a6422f8357e31a8dd75af59f797d0b;hb=80cd7b93506cc1926882d5fd08a2c74ee9359e29;hp=383abda24383dad3310e5e00cd153d3e62794439;hpb=467a270adf12425827305759c0c4ea8f5b2b3854;p=opencv diff --git a/otherlibs/highgui/utils.cpp b/otherlibs/highgui/utils.cpp index 383abda..c5b48ff 100644 --- a/otherlibs/highgui/utils.cpp +++ b/otherlibs/highgui/utils.cpp @@ -42,6 +42,38 @@ #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) @@ -546,12 +578,13 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) 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" ); @@ -564,20 +597,29 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) 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) ) @@ -596,8 +638,8 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) 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 ); @@ -608,9 +650,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) 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 )