16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M/////////////////////////////////////////////////////////////////////////////////////// 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// By downloading, copying, installing or using the software you agree to this license. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// If you do not agree to this license, do not download, install, 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// copy or use the software. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Intel License Agreement 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// For Open Source Computer Vision Library 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners. 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification, 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met: 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's of source code must retain the above copyright notice, 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer. 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's in binary form must reproduce the above copyright notice, 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer in the documentation 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and/or other materials provided with the distribution. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * The name of Intel Corporation may not be used to endorse or promote products 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// derived from this software without specific prior written permission. 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed. 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct, 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services; 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability, 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage. 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/ 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "_highgui.h" 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "utils.h" 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 && defined _MSC_VER && _MSC_VER >= 1200 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN64 && defined EM64T 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef _DEBUG 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjasperd_64.lib") 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjpegd_64.lib") 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libpngd_64.lib") 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libtiffd_64.lib") 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "zlibd_64.lib") 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjasper_64.lib") 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjpeg_64.lib") 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libpng_64.lib") 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libtiff_64.lib") 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "zlib_64.lib") 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif !defined WIN64 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef _DEBUG 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjasperd.lib") 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjpegd.lib") 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libpngd.lib") 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libtiffd.lib") 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "zlibd.lib") 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjasper.lib") 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libjpeg.lib") 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libpng.lib") 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "libtiff.lib") 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma comment(lib, "zlib.lib") 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define SCALE 14 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cR (int)(0.299*(1 << SCALE) + 0.5) 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cG (int)(0.587*(1 << SCALE) + 0.5) 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cB ((1 << SCALE) - cR - cG) 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR2Gray_8u_C3C1R( const uchar* rgb, int rgb_step, 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* gray, int gray_step, 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int _swap_rb ) 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int swap_rb = _swap_rb ? 2 : 0; 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step ) 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, rgb += 3 ) 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( rgb[swap_rb]*cB + rgb[1]*cG + rgb[swap_rb^2]*cR, SCALE ); 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (uchar)t; 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb += rgb_step - size.width*3; 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR2Gray_16u_C3C1R( const ushort* rgb, int rgb_step, 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ushort* gray, int gray_step, 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int _swap_rb ) 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int swap_rb = _swap_rb ? 2 : 0; 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step ) 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, rgb += 3 ) 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( rgb[swap_rb]*cB + rgb[1]*cG + rgb[swap_rb^2]*cR, SCALE ); 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (ushort)t; 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb += rgb_step - size.width*3; 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGRA2Gray_8u_C4C1R( const uchar* rgba, int rgba_step, 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* gray, int gray_step, 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int _swap_rb ) 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int swap_rb = _swap_rb ? 2 : 0; 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step ) 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, rgba += 4 ) 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( rgba[swap_rb]*cB + rgba[1]*cG + rgba[swap_rb^2]*cR, SCALE ); 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (uchar)t; 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgba += rgba_step - size.width*4; 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_Gray2BGR_8u_C1C3R( const uchar* gray, int gray_step, 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bgr, int bgr_step, CvSize size ) 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step ) 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3 ) 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr[0] = bgr[1] = bgr[2] = gray[i]; 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGRA2BGR_8u_C4C3R( const uchar* bgra, int bgra_step, 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bgr, int bgr_step, 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int _swap_rb ) 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int swap_rb = _swap_rb ? 2 : 0; 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3, bgra += 4 ) 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar t0 = bgra[swap_rb], t1 = bgra[1]; 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr[0] = t0; bgr[1] = t1; 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn t0 = bgra[swap_rb^2]; bgr[2] = t0; 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgra += bgra_step - size.width*4; 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step, 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* rgba, int rgba_step, CvSize size ) 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgra += 4, rgba += 4 ) 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar t0 = bgra[0], t1 = bgra[1]; 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar t2 = bgra[2], t3 = bgra[3]; 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgba[0] = t2; rgba[1] = t1; 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgba[2] = t0; rgba[3] = t3; 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgra += bgra_step - size.width*4; 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgba += rgba_step - size.width*4; 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR2RGB_8u_C3R( const uchar* bgr, int bgr_step, 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* rgb, int rgb_step, CvSize size ) 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3, rgb += 3 ) 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar t0 = bgr[0], t1 = bgr[1], t2 = bgr[2]; 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb[2] = t0; rgb[1] = t1; rgb[0] = t2; 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb += rgb_step - size.width*3; 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR2RGB_16u_C3R( const ushort* bgr, int bgr_step, 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ushort* rgb, int rgb_step, CvSize size ) 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3, rgb += 3 ) 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ushort t0 = bgr[0], t1 = bgr[1], t2 = bgr[2]; 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb[2] = t0; rgb[1] = t1; rgb[0] = t2; 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rgb += rgb_step - size.width*3; 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned short ushort; 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR5552Gray_8u_C2C1R( const uchar* bgr555, int bgr555_step, 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* gray, int gray_step, CvSize size ) 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step, bgr555 += bgr555_step ) 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++ ) 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( ((((ushort*)bgr555)[i] << 3) & 0xf8)*cB + 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((ushort*)bgr555)[i] >> 2) & 0xf8)*cG + 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((ushort*)bgr555)[i] >> 7) & 0xf8)*cR, SCALE ); 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (uchar)t; 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR5652Gray_8u_C2C1R( const uchar* bgr565, int bgr565_step, 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* gray, int gray_step, CvSize size ) 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; gray += gray_step, bgr565 += bgr565_step ) 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++ ) 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( ((((ushort*)bgr565)[i] << 3) & 0xf8)*cB + 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((ushort*)bgr565)[i] >> 3) & 0xfc)*cG + 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((ushort*)bgr565)[i] >> 8) & 0xf8)*cR, SCALE ); 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (uchar)t; 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR5552BGR_8u_C2C3R( const uchar* bgr555, int bgr555_step, 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bgr, int bgr_step, CvSize size ) 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; bgr555 += bgr555_step ) 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3 ) 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t0 = (((ushort*)bgr555)[i] << 3) & 0xf8; 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t1 = (((ushort*)bgr555)[i] >> 2) & 0xf8; 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t2 = (((ushort*)bgr555)[i] >> 7) & 0xf8; 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr[0] = (uchar)t0; bgr[1] = (uchar)t1; bgr[2] = (uchar)t2; 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_BGR5652BGR_8u_C2C3R( const uchar* bgr565, int bgr565_step, 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bgr, int bgr_step, CvSize size ) 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; bgr565 += bgr565_step ) 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3 ) 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t0 = (((ushort*)bgr565)[i] << 3) & 0xf8; 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t1 = (((ushort*)bgr565)[i] >> 3) & 0xfc; 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t2 = (((ushort*)bgr565)[i] >> 8) & 0xf8; 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr[0] = (uchar)t0; bgr[1] = (uchar)t1; bgr[2] = (uchar)t2; 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_CMYK2BGR_8u_C4C3R( const uchar* cmyk, int cmyk_step, 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bgr, int bgr_step, CvSize size ) 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, bgr += 3, cmyk += 4 ) 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3]; 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn c = k - ((255 - c)*k>>8); 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m = k - ((255 - m)*k>>8); 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn y = k - ((255 - y)*k>>8); 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr[2] = (uchar)c; bgr[1] = (uchar)m; bgr[0] = (uchar)y; 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bgr += bgr_step - size.width*3; 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cmyk += cmyk_step - size.width*4; 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvCvt_CMYK2Gray_8u_C4C1R( const uchar* cmyk, int cmyk_step, 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* gray, int gray_step, CvSize size ) 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; size.height--; ) 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < size.width; i++, cmyk += 4 ) 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3]; 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn c = k - ((255 - c)*k>>8); 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m = k - ((255 - m)*k>>8); 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn y = k - ((255 - y)*k>>8); 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t = descale( y*cB + m*cG + c*cR, SCALE ); 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray[i] = (uchar)t; 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn gray += gray_step; 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cmyk += cmyk_step - size.width*4; 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid CvtPaletteToGray( const PaletteEntry* palette, uchar* grayPalette, int entries ) 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < entries; i++ ) 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_BGR2Gray_8u_C3C1R( (uchar*)(palette + i), 0, grayPalette + i, 0, cvSize(1,1) ); 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid FillGrayPalette( PaletteEntry* palette, int bpp, bool negative ) 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, length = 1 << bpp; 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int xor_mask = negative ? 255 : 0; 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < length; i++ ) 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int val = (i * 255/(length - 1)) ^ xor_mask; 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn palette[i].b = palette[i].g = palette[i].r = (uchar)val; 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn palette[i].a = 0; 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennbool IsColorPalette( PaletteEntry* palette, int bpp ) 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, length = 1 << bpp; 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < length; i++ ) 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( palette[i].b != palette[i].g || 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn palette[i].b != palette[i].r ) 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return true; 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return false; 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillUniColor( uchar* data, uchar*& line_end, 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step, int width3, 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int& y, int height, 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count3, PaletteEntry clr ) 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn do 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + count3; 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( end > line_end ) 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn end = line_end; 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn count3 -= (int)(end - data); 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; data < end; data += 3 ) 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn WRITE_PIX( data, clr ); 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( data >= line_end ) 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn line_end += step; 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data = line_end - width3; 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( ++y >= height ) break; 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( count3 > 0 ); 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data; 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillUniGray( uchar* data, uchar*& line_end, 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step, int width, 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int& y, int height, 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count, uchar clr ) 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn do 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + count; 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( end > line_end ) 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn end = line_end; 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn count -= (int)(end - data); 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ; data < end; data++ ) 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *data = clr; 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( data >= line_end ) 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn line_end += step; 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data = line_end - width; 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( ++y >= height ) break; 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( count > 0 ); 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data; 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillColorRow8( uchar* data, uchar* indices, int len, PaletteEntry* palette ) 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + len*3; 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( (data += 3) < end ) 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data-3)) = palette[*indices++]; 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PaletteEntry clr = palette[indices[0]]; 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn WRITE_PIX( data - 3, clr ); 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data; 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillGrayRow8( uchar* data, uchar* indices, int len, uchar* palette ) 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < len; i++ ) 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[i] = palette[indices[i]]; 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data + len; 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillColorRow4( uchar* data, uchar* indices, int len, PaletteEntry* palette ) 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + len*3; 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( (data += 6) < end ) 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = *indices++; 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data-6)) = palette[idx >> 4]; 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data-3)) = palette[idx & 15]; 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = indices[0]; 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PaletteEntry clr = palette[idx >> 4]; 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn WRITE_PIX( data - 6, clr ); 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( data == end ) 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn clr = palette[idx & 15]; 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn WRITE_PIX( data - 3, clr ); 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return end; 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillGrayRow4( uchar* data, uchar* indices, int len, uchar* palette ) 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + len; 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( (data += 2) < end ) 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = *indices++; 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[-2] = palette[idx >> 4]; 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[-1] = palette[idx & 15]; 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = indices[0]; 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar clr = palette[idx >> 4]; 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[-2] = clr; 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( data == end ) 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn clr = palette[idx & 15]; 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[-1] = clr; 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return end; 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillColorRow1( uchar* data, uchar* indices, int len, PaletteEntry* palette ) 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + len*3; 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( (data += 24) < end ) 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = *indices++; 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 24)) = palette[(idx & 128) != 0]; 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 21)) = palette[(idx & 64) != 0]; 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 18)) = palette[(idx & 32) != 0]; 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 15)) = palette[(idx & 16) != 0]; 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 12)) = palette[(idx & 8) != 0]; 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 9)) = palette[(idx & 4) != 0]; 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 6)) = palette[(idx & 2) != 0]; 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((PaletteEntry*)(data - 3)) = palette[(idx & 1) != 0]; 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = indices[0] << 24; 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( data -= 24; data < end; data += 3, idx += idx ) 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PaletteEntry clr = palette[idx < 0]; 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn WRITE_PIX( data, clr ); 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data; 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* FillGrayRow1( uchar* data, uchar* indices, int len, uchar* palette ) 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* end = data + len; 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( (data += 8) < end ) 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = *indices++; 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 8)) = palette[(idx & 128) != 0]; 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 7)) = palette[(idx & 64) != 0]; 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 6)) = palette[(idx & 32) != 0]; 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 5)) = palette[(idx & 16) != 0]; 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 4)) = palette[(idx & 8) != 0]; 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 3)) = palette[(idx & 4) != 0]; 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 2)) = palette[(idx & 2) != 0]; 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *((uchar*)(data - 1)) = palette[(idx & 1) != 0]; 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx = indices[0] << 24; 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( data -= 8; data < end; data++, idx += idx ) 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data[0] = palette[idx < 0]; 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return data; 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL void 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* temp = 0; 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_FUNCNAME( "cvConvertImage" ); 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __BEGIN__; 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat srcstub, *src; 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dststub, *dst; 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int src_cn, dst_cn, swap_rb = flags & CV_CVTIMG_SWAP_RB; 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_CALL( src = cvGetMat( srcarr, &srcstub )); 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_CALL( dst = cvGetMat( dstarr, &dststub )); 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn src_cn = CV_MAT_CN( src->type ); 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst_cn = CV_MAT_CN( dst->type ); 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( src_cn != 1 && src_cn != 3 && src_cn != 4 ) 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( CV_BadNumChannels, "Source image must have 1, 3 or 4 channels" ); 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( CV_MAT_DEPTH( dst->type ) != CV_8U ) 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( CV_BadDepth, "Destination image must be 8u" ); 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( CV_MAT_CN(dst->type) != 1 && CV_MAT_CN(dst->type) != 3 ) 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( CV_BadNumChannels, "Destination image must have 1 or 3 channels" ); 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !CV_ARE_DEPTHS_EQ( src, dst )) 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int src_depth = CV_MAT_DEPTH(src->type); 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255; 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0; 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !CV_ARE_CNS_EQ( src, dst )) 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn temp = cvCreateMat( src->height, src->width, 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (src->type & CV_MAT_CN_MASK)|(dst->type & CV_MAT_DEPTH_MASK)); 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvConvertScale( src, temp, scale, shift ); 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn src = temp; 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvConvertScale( src, dst, scale, shift ); 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn src = dst; 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( src_cn != dst_cn || src_cn == 3 && swap_rb ) 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar *s = src->data.ptr, *d = dst->data.ptr; 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int s_step = src->step, d_step = dst->step; 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int code = src_cn*10 + dst_cn; 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size = { src->cols, src->rows }; 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( CV_IS_MAT_CONT(src->type & dst->type) ) 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size.width *= size.height; 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size.height = 1; 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn s_step = d_step = CV_STUB_STEP; 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn switch( code ) 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn case 13: 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_Gray2BGR_8u_C1C3R( s, s_step, d, d_step, size ); 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn case 31: 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb ); 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn case 33: 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( swap_rb ); 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size ); 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn case 41: 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_BGRA2Gray_8u_C4C1R( s, s_step, d, d_step, size, swap_rb ); 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn case 43: 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvCvt_BGRA2BGR_8u_C4C3R( s, s_step, d, d_step, size, swap_rb ); 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn default: 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( CV_StsUnsupportedFormat, "Unsupported combination of input/output formats" ); 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn src = dst; 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( flags & CV_CVTIMG_FLIP ) 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_CALL( cvFlip( src, dst, 0 )); 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( src != dst ) 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_CALL( cvCopy( src, dst )); 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __END__; 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat( &temp ); 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 669