c_color_space.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:11k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // c_color_space.cpp: implementation of the c_color_space class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "..stdafx.h"
  5. #include "c_color_space.h"
  6. #ifdef _DEBUG
  7. #undef THIS_FILE
  8. static char THIS_FILE[]=__FILE__;
  9. #define new DEBUG_NEW
  10. #endif
  11. //////////////////////////////////////////////////////////////////////
  12. // Construction/Destruction
  13. //////////////////////////////////////////////////////////////////////
  14. c_color_space::c_color_space()
  15. {
  16. }
  17. c_color_space::~c_color_space()
  18. {
  19. }
  20. /************************************************************************************************/
  21. void __stdcall c_color_space::rgb555_to_rgb555(void* d,void* s,unsigned int l)
  22. {
  23. c_color_space::memory_copy(d,s,l);
  24. }
  25. void __stdcall c_color_space::rgb555_to_bgr555(void* d,void* s,unsigned int l)
  26. {
  27. WORD* ps=(WORD*)s;
  28. WORD* pd=(WORD*)d;
  29. WORD r,g,b;
  30. for(unsigned int i=0;i<l/2;i++)
  31. {
  32. r=g=b=*ps;ps++;
  33. r=(r<<10) & 0x7C00;
  34. g=g & 0x3E0;
  35. b=(b>>10) & 0x1F;
  36. *pd=r|g|b;pd++;
  37. }
  38. }
  39. void __stdcall c_color_space::rgb555_to_rgb565(void* d,void* s,unsigned int l)
  40. {
  41. WORD* ps=(WORD*)s;
  42. WORD* pd=(WORD*)d;
  43. WORD r,g,b;
  44. for(unsigned int i=0;i<l/2;i++)
  45. {
  46. r=g=b=*ps;ps++;
  47. r=r & 0x1F;
  48. g=(g<<1) & 0x7E0;
  49. b=(b<<1) & 0xF800;
  50. *pd=r|g|b;pd++;
  51. }
  52. }
  53. void __stdcall c_color_space::rgb555_to_bgr565(void* d,void* s,unsigned int l)
  54. {
  55. WORD* ps=(WORD*)s;
  56. WORD* pd=(WORD*)d;
  57. WORD r,g,b;
  58. for(unsigned int i=0;i<l/2;i++)
  59. {
  60. r=g=b=*ps;ps++;
  61. r=(r<<11) & 0xF800;
  62. g=(g<<1)  & 0x7E0;
  63. b=(b>>10) & 0x1F;
  64. *pd=r|g|b;pd++;
  65. }
  66. }
  67. void __stdcall c_color_space::rgb555_to_rgb888(void* d,void* s,unsigned int l)
  68. {
  69. WORD* ps=(WORD*)s;
  70. BYTE* pd=(BYTE*)d;
  71. WORD r,g,b,alpha=0xFF;
  72. for(unsigned int i=0;i<l/2;i++)
  73. {
  74. r=g=b=*ps;ps++;
  75. *pd=(r<<3) & 0xFF;pd++;
  76. *pd=(g>>2) & 0xFF;pd++;
  77. *pd=(b>>7) & 0xFF;pd++;
  78. }
  79. }
  80. void __stdcall c_color_space::rgb555_to_bgr888(void* d,void* s,unsigned int l)
  81. {
  82. WORD* ps=(WORD*)s;
  83. BYTE* pd=(BYTE*)d;
  84. WORD r,g,b,alpha=0xFF;
  85. for(unsigned int i=0;i<l/2;i++)
  86. {
  87. r=g=b=*ps;ps++;
  88. *pd=(b>>7) & 0xFF;pd++;
  89. *pd=(g>>2) & 0xFF;pd++;
  90. *pd=(r<<3) & 0xFF;pd++;
  91. }
  92. }
  93. void __stdcall c_color_space::rgb555_to_rgb8888(void* d,void* s,unsigned int l)
  94. {
  95. WORD* ps=(WORD*)s;
  96. BYTE* pd=(BYTE*)d;
  97. WORD r,g,b,alpha=0xFF;
  98. for(unsigned int i=0;i<l/2;i++)
  99. {
  100. r=g=b=*ps;ps++;
  101. *pd=(r<<3) & 0xFF;pd++;
  102. *pd=(g>>2) & 0xFF;pd++;
  103. *pd=(b>>7) & 0xFF;pd++;
  104. *pd=(BYTE)alpha; pd++;
  105. }
  106. }
  107. void __stdcall c_color_space::rgb555_to_bgr8888(void* d,void* s,unsigned int l)
  108. {
  109. WORD* ps=(WORD*)s;
  110. BYTE* pd=(BYTE*)d;
  111. WORD r,g,b,alpha=0xFF;
  112. for(unsigned int i=0;i<l/2;i++)
  113. {
  114. r=g=b=*ps;ps++;
  115. *pd=(b>>7) & 0xFF;pd++;
  116. *pd=(g>>2) & 0xFF;pd++;
  117. *pd=(r<<3) & 0xFF;pd++;
  118. *pd=(BYTE)alpha; pd++;
  119. }
  120. }
  121. /*RGB565*/
  122. void __stdcall c_color_space::rgb565_to_rgb565(void* d,void* s,unsigned int l)
  123. {
  124. c_color_space::memory_copy(d,s,l);
  125. }
  126. void __stdcall c_color_space::rgb565_to_bgr565(void* d,void* s,unsigned int l)
  127. {
  128. WORD* ps=(WORD*)s;
  129. WORD* pd=(WORD*)d;
  130. WORD r,g,b;
  131. for(unsigned int i=0;i<l/2;i++)
  132. {
  133. r=g=b=*ps;ps++;
  134. r=(r<<11) & 0xF800;
  135. g=g & 0x7E0;
  136. b=(b>>11) &0x1F;
  137. *pd=r|g|b;pd++;
  138. }
  139. }
  140. void __stdcall c_color_space::rgb565_to_rgb555(void* d,void* s,unsigned int l)
  141. {
  142. WORD* ps=(WORD*)s;
  143. WORD* pd=(WORD*)d;
  144. WORD r,g,b;
  145. for(unsigned int i=0;i<l/2;i++)
  146. {
  147. r=g=b=*ps;ps++;
  148. r=r & 0x1F;
  149. g=(g>>1 ) & 0x3E0;
  150. b=(b>>1)  & 0x7C00;
  151. *pd=r|g|b;pd++;
  152. }
  153. }
  154. void __stdcall c_color_space::rgb565_to_bgr555(void* d,void* s,unsigned int l)
  155. {
  156. WORD* ps=(WORD*)s;
  157. WORD* pd=(WORD*)d;
  158. WORD r,g,b;
  159. for(unsigned int i=0;i<l/2;i++)
  160. {
  161. r=g=b=*ps;ps++;
  162. r=(r<<10) & 0x7C00;
  163. g=(g>>1 ) & 0x3E0;
  164. b=(b>>11) & 0x1F;
  165. *pd=r|g|b;pd++;
  166. }
  167. }
  168. void __stdcall c_color_space::rgb565_to_rgb888(void* d,void* s,unsigned int l)
  169. {
  170. WORD* ps=(WORD*)s;
  171. BYTE* pd=(BYTE*)d;
  172. WORD r,g,b,alpha=0xFF;
  173. for(unsigned int i=0;i<l/2;i++)
  174. {
  175. r=g=b=*ps;ps++;
  176. *pd=(r<<3) & 0xFF;pd++;
  177. *pd=(g>>3) & 0xFF;pd++;
  178. *pd=(b>>8) & 0xFF;pd++;
  179. }
  180. }
  181. void __stdcall c_color_space::rgb565_to_bgr888(void* d,void* s,unsigned int l)
  182. {
  183. WORD* ps=(WORD*)s;
  184. BYTE* pd=(BYTE*)d;
  185. WORD r,g,b,alpha=0xFF;
  186. for(unsigned int i=0;i<l/2;i++)
  187. {
  188. r=g=b=*ps;ps++;
  189. *pd=(b>>8) & 0xFF;pd++;
  190. *pd=(g>>3) & 0xFF;pd++;
  191. *pd=(r<<3) & 0xFF;pd++;
  192. }
  193. }
  194. void __stdcall c_color_space::rgb565_to_rgb8888(void* d,void* s,unsigned int l)
  195. {
  196. WORD* ps=(WORD*)s;
  197. BYTE* pd=(BYTE*)d;
  198. WORD r,g,b,alpha=0xFF;
  199. for(unsigned int i=0;i<l/2;i++)
  200. {
  201. r=g=b=*ps;ps++;
  202. *pd=(r<<3) & 0xFF;pd++;
  203. *pd=(g>>3) & 0xFF;pd++;
  204. *pd=(b>>8) & 0xFF;pd++;
  205. *pd=(BYTE)alpha;  pd++;
  206. }
  207. }
  208. void __stdcall c_color_space::rgb565_to_bgr8888(void* d,void* s,unsigned int l)
  209. {
  210. WORD* ps=(WORD*)s;
  211. BYTE* pd=(BYTE*)d;
  212. WORD r,g,b,alpha=0xFF;
  213. for(unsigned int i=0;i<l/2;i++)
  214. {
  215. r=g=b=*ps;ps++;
  216. *pd=(b>>8) & 0xFF;pd++;
  217. *pd=(g>>3) & 0xFF;pd++;
  218. *pd=(r<<3) & 0xFF;pd++;
  219. *pd=(BYTE)alpha;  pd++;
  220. }
  221. }
  222. /*RGB888*/
  223. void __stdcall c_color_space::rgb888_to_rgb555(void* d,void* s,unsigned int l)
  224. {
  225. BYTE* ps=(BYTE*)s;
  226. WORD* pd=(WORD*)d;
  227. WORD r,g,b;
  228. for(unsigned int i=0;i<l/3;i++)
  229. {
  230. r=(WORD)*ps;ps++;
  231. g=(WORD)*ps;ps++;
  232. b=(WORD)*ps;ps++;
  233. r=(r>>3) & 0x1F;
  234. g=(g<<2) & 0x3E0;
  235. b=(b<<7) & 0x7C00;
  236. *pd=r|g|b;pd++;
  237. }
  238. }
  239. void __stdcall c_color_space::rgb888_to_bgr555(void* d,void* s,unsigned int l)
  240. {
  241. BYTE* ps=(BYTE*)s;
  242. WORD* pd=(WORD*)d;
  243. WORD r,g,b;
  244. for(unsigned int i=0;i<l/3;i++)
  245. {
  246. b=(WORD)*ps;ps++;
  247. g=(WORD)*ps;ps++;
  248. r=(WORD)*ps;ps++;
  249. r=(r>>3) & 0x1F;
  250. g=(g<<2) & 0x3E0;
  251. b=(b<<7) & 0x7C00;
  252. *pd=r|g|b;pd++;
  253. }
  254. }
  255. void __stdcall c_color_space::rgb888_to_rgb565(void* d,void* s,unsigned int l)
  256. {
  257. BYTE* ps=(BYTE*)s;
  258. WORD* pd=(WORD*)d;
  259. WORD r,g,b;
  260. for(unsigned int i=0;i<l/3;i++)
  261. {
  262. r=(WORD)*ps;ps++;
  263. g=(WORD)*ps;ps++;
  264. b=(WORD)*ps;ps++;
  265. r=(r>>3) & 0x1F;
  266. g=(g<<3) & 0x7E0;
  267. b=(b<<8) & 0xF800;
  268. *pd=r|g|b;pd++;
  269. }
  270. }
  271. void __stdcall c_color_space::rgb888_to_bgr565(void* d,void* s,unsigned int l)
  272. {
  273. BYTE* ps=(BYTE*)s;
  274. WORD* pd=(WORD*)d;
  275. WORD r,g,b;
  276. for(unsigned int i=0;i<l/3;i++)
  277. {
  278. b=(WORD)*ps;ps++;
  279. g=(WORD)*ps;ps++;
  280. r=(WORD)*ps;ps++;
  281. r=(r>>3) & 0x1F;
  282. g=(g<<3) & 0x7E0;
  283. b=(b<<8) & 0xF800;
  284. *pd=r|g|b;pd++;
  285. }
  286. }
  287. void __stdcall c_color_space::rgb888_to_rgb888(void* d,void* s,unsigned int l)
  288. {
  289. c_color_space::memory_copy(d,s,l);
  290. }
  291. void __stdcall c_color_space::rgb888_to_bgr888(void* d,void* s,unsigned int l)
  292. {
  293. BYTE* ps=(BYTE*)s;
  294. BYTE* pd=(BYTE*)d;
  295. BYTE r,g,b;
  296. for(unsigned int i=0;i<l/3;i++)
  297. {
  298. r=*ps;ps++;
  299. g=*ps;ps++;
  300. b=*ps;ps++;
  301. *pd=b;pd++;
  302. *pd=g;pd++;
  303. *pd=r;pd++;
  304. }
  305. }
  306. void __stdcall c_color_space::rgb888_to_rgb8888(void* d,void* s,unsigned int l)
  307. {
  308. BYTE* ps=(BYTE*)s;
  309. BYTE* pd=(BYTE*)d;
  310. for(unsigned int i=0;i<l/3;i++)
  311. {
  312. *pd=*ps;ps++;pd++;
  313. *pd=*ps;ps++;pd++;
  314. *pd=*ps;ps++;pd++;
  315. *pd=0xFF;pd++;//alpha
  316. }
  317. }
  318. void __stdcall c_color_space::rgb888_to_bgr8888(void* d,void* s,unsigned int l)
  319. {
  320. BYTE* ps=(BYTE*)s;
  321. BYTE* pd=(BYTE*)d;
  322. BYTE r,g,b;
  323. for(unsigned int i=0;i<l/3;i++)
  324. {
  325. r=*ps;ps++;
  326. g=*ps;ps++;
  327. b=*ps;ps++;
  328. *pd=b;pd++;
  329. *pd=g;pd++;
  330. *pd=r;pd++;
  331. *pd=0xFF;pd++;//alpha
  332. }
  333. }
  334. /*RGB8888*/
  335. void __stdcall c_color_space::rgb8888_to_rgb555(void* d,void* s,unsigned int l)
  336. {
  337. BYTE* ps=(BYTE*)s;
  338. WORD* pd=(WORD*)d;
  339. WORD r,g,b;
  340. for(unsigned int i=0;i<l/4;i++)
  341. {
  342. r=(WORD)*ps;ps++;
  343. g=(WORD)*ps;ps++;
  344. b=(WORD)*ps;ps++;
  345. ps++;//for alpha;
  346. r=(r>>3) & 0x1F;
  347. g=(g<<2) & 0x3E0;
  348. b=(b<<7) & 0x7C00;
  349. *pd=r|g|b;pd++;
  350. }
  351. }
  352. void __stdcall c_color_space::rgb8888_to_bgr555(void* d,void* s,unsigned int l)
  353. {
  354. BYTE* ps=(BYTE*)s;
  355. WORD* pd=(WORD*)d;
  356. WORD r,g,b;
  357. for(unsigned int i=0;i<l/4;i++)
  358. {
  359. b=(WORD)*ps;ps++;
  360. g=(WORD)*ps;ps++;
  361. r=(WORD)*ps;ps++;
  362. ps++;//for alpha;
  363. r=(r>>3) & 0x1F;
  364. g=(g<<2) & 0x3E0;
  365. b=(b<<7) & 0x7C00;
  366. *pd=r|g|b;pd++;
  367. }
  368. }
  369. void __stdcall c_color_space::rgb8888_to_rgb565(void* d,void* s,unsigned int l)
  370. {
  371. BYTE* ps=(BYTE*)s;
  372. WORD* pd=(WORD*)d;
  373. WORD r,g,b;
  374. for(unsigned int i=0;i<l/4;i++)
  375. {
  376. r=(WORD)*ps;ps++;
  377. g=(WORD)*ps;ps++;
  378. b=(WORD)*ps;ps++;
  379. ps++;//for alpha;
  380. r=(r>>3) & 0x1F;
  381. g=(g<<3) & 0x7E0;
  382. b=(b<<8) & 0xF800;
  383. *pd=r|g|b;pd++;
  384. }
  385. }
  386. void __stdcall c_color_space::rgb8888_to_bgr565(void* d,void* s,unsigned int l)
  387. {
  388. BYTE* ps=(BYTE*)s;
  389. WORD* pd=(WORD*)d;
  390. WORD r,g,b;
  391. for(unsigned int i=0;i<l/4;i++)
  392. {
  393. b=(WORD)*ps;ps++;
  394. g=(WORD)*ps;ps++;
  395. r=(WORD)*ps;ps++;
  396. ps++;//for alpha;
  397. r=(r>>3) & 0x1F;
  398. g=(g<<3) & 0x7E0;
  399. b=(b<<8) & 0xF800;
  400. *pd=r|g|b;pd++;
  401. }
  402. }
  403. void __stdcall c_color_space::rgb8888_to_rgb888(void* d,void* s,unsigned int l)
  404. {
  405. BYTE* ps=(BYTE*)s;
  406. BYTE* pd=(BYTE*)d;
  407. for(unsigned int i=0;i<l/4;i++)
  408. {
  409. *pd=*ps;ps++;pd++;
  410. *pd=*ps;ps++;pd++;
  411. *pd=*ps;ps++;pd++;
  412. ps++;//for alpha;
  413. }
  414. }
  415. void __stdcall c_color_space::rgb8888_to_bgr888(void* d,void* s,unsigned int l)
  416. {
  417. BYTE* ps=(BYTE*)s;
  418. BYTE* pd=(BYTE*)d;
  419. BYTE r,g,b;
  420. for(unsigned int i=0;i<l/4;i++)
  421. {
  422. r=*ps;ps++;
  423. g=*ps;ps++;
  424. b=*ps;ps++;
  425. ps++;//for alpha;
  426. *pd=b;pd++;
  427. *pd=g;pd++;
  428. *pd=r;pd++;
  429. }
  430. }
  431. void __stdcall c_color_space::rgb8888_to_rgb8888(void* d,void* s,unsigned int l)
  432. {
  433. c_color_space::memory_copy(d,s,l);
  434. }
  435. void __stdcall c_color_space::rgb8888_to_bgr8888(void* d,void* s,unsigned int l)
  436. {
  437. BYTE* ps=(BYTE*)s;
  438. BYTE* pd=(BYTE*)d;
  439. BYTE r,g,b,a;
  440. for(unsigned int i=0;i<l/4;i++)
  441. {
  442. r=*ps;ps++;
  443. g=*ps;ps++;
  444. b=*ps;ps++;
  445. a=*ps;ps++;//for alpha;
  446. *pd=b;pd++;
  447. *pd=g;pd++;
  448. *pd=r;pd++;
  449. *pd=a;pd++;
  450. }
  451. }
  452. /*YUV*/
  453. //wait!!
  454. /*YUV2*/
  455. //wait!!
  456. /*HSV*/
  457. //wait!!
  458. /*others*/
  459. void __stdcall c_color_space::zero_memory(void* d,unsigned int l)
  460. {
  461. memset(d,0,l);
  462. }
  463. void __stdcall c_color_space::memory_copy(void* d,void* s,unsigned int l)
  464. {
  465. memcpy(d,s,l);
  466. }
  467. void __stdcall c_color_space::flip_bmp(void* s,int w,int h,int c)
  468. {
  469. int width=w*c/8;
  470. int len=w*h*c/8;
  471. if(c==16)
  472. {
  473. WORD* ph=(WORD*)s;
  474. WORD* pt=(WORD*)(((DWORD)s)+len-width);
  475. WORD  tmp=0;
  476. while(ph<pt)
  477. {
  478. for(int i=0;i<w;i++)
  479. {
  480. tmp=ph[i];
  481. ph[i]=pt[i];
  482. pt[i]=tmp;
  483. }
  484. ph+=w;
  485. pt-=w;
  486. }
  487. }
  488. else if(c==24)
  489. {
  490. BYTE* ph=(BYTE*)s;
  491. BYTE* pt=(BYTE*)(((DWORD)s)+len-width);
  492. BYTE  tmp=0;
  493. while(ph<pt)
  494. {
  495. for(int i=0;i<width;i++)
  496. {
  497. tmp=ph[i];
  498. ph[i]=pt[i];
  499. pt[i]=tmp;
  500. }
  501. ph+=width;
  502. pt-=width;
  503. }
  504. }
  505. else if(c=32)
  506. {
  507. DWORD* ph=(DWORD*)s;
  508. DWORD* pt=(DWORD*)(((DWORD)s)+len-width);
  509. DWORD  tmp=0;
  510. while(ph<pt)
  511. {
  512. for(int i=0;i<w;i++)
  513. {
  514. tmp=ph[i];
  515. ph[i]=pt[i];
  516. pt[i]=tmp;
  517. }
  518. ph+=w;
  519. pt-=w;
  520. }
  521. }
  522. }
  523. void __stdcall c_color_space::mirror_bmp(void* s,int w,int h,int c)
  524. {
  525. }