📄 img.c
字号:
return;}// Transform RGB565 gray scalevoid RGB565ToGray565(char *r_ibuf, char *r_obuf, long size){ int i; unsigned short *ibuf, *obuf; unsigned int gray; ibuf = (unsigned short *) r_ibuf; obuf = (unsigned short *) r_obuf; for (i = 0; i < size / 2; i++) { gray = RGB565toGray(ibuf[i]); //Combine r, g, b parts together obuf[i] = gray << 11 | gray << 6 | gray; } return;}//transform buffer from 240x320 RGB444 to 104x80 RGB 444.void sizeTransform(char *buf){ //Now the screen buffer is 240x320 RGB444 data //We'll transform it to 104x80 //Note we'll use only one buffer int i, j; for (i = 0; i < 80; i++) for (j = 0; j < 104 * 3 / 2; j++) buf[i * 104 * 3 / 2 + j] = buf[i * 240 * 3 / 2 + j];}//transform buffer from 240x320 RGB565 to 104x80 RGB 565.//left and right 22 are blank, only 60x80 used.//ibuf size should be 240x320x2//obuf size should be 104x80x2void sizeTransform2(char *r_ibuf, char *r_obuf){ int i, j, k; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; for (i = 0; i < 320; i += 4) { //make left and right 22 colomns blank for (k = 0; k < 22; k++) obuf[(i / 4) * 104 + k] = 0xFFFF; for (k = 82; k < 104; k++) obuf[(i / 4) * 104 + k] = 0xFFFF; //middle 60 columms use subsampling for (j = 0; j < 240; j += 4) { obuf[(i / 4) * 104 + j / 4 + 22] = ibuf[i * 240 + j]; } }}//transform buffer from 240x320 RGB565 to 60x80 RGB 565.//ibuf size should be 240x320x2//obuf size should be 60x80x2void sizeTransform3(char *r_ibuf, char *r_obuf){ int x, y; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; for (y = 0; y < 320; y += 4) { for (x = 0; x < 240; x += 4) obuf[(y / 4) * 60 + x / 4] = ibuf[y * 240 + x]; }}//Add black margin to a pic of 60x80 RGB 565//ibuf size should be 60x80x2//obuf size should be 240x320x2void add_margin(char *r_ibuf, char *r_obuf){ int x, y; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; for (y = 0; y < 320; y++) { for (x = 0; x < 240; x++) { if (y < 80 && x < 60) obuf[y * 240 + x] = ibuf[y * 60 + x]; else obuf[y * 240 + x] = 0xFF; } }}//transform buffer from 60x80 RGB565 to 104x80 RGB 565.//ibuf size should be 60x80x2//obuf size should be 104x80x2void size_enlarge(char *r_ibuf, int iw, int ih, char *r_obuf, int ow, int oh){ int x, y; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; oh = 0; //Not used for (y = 0; y < ih; y++) { for (x = 0; x < iw; x++) obuf[y * ow + x] = ibuf[y * iw + x]; }}//Copy 104x80 window from 240x320void sizeTransform5(char *r_ibuf, char *r_obuf){ int row, col, row2, col2; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; int row_offset = 180; int col_offset = 20; //Copy 104x80 window from 240x320#if 0 for (row = row_offset; row < row_offset + 80; row++) { row2 = row - row_offset; for (col = col_offset; col < col_offset + 104; col++) { col2 = col - col_offset; obuf[row2 * 104 + col2] = ibuf[row * 240 + col]; } }#else for (row = 0; row < 80; row++) { row2 = row + row_offset; for (col = 0; col < 104; col++) { col2 = col + col_offset; obuf[row * 104 + col] = ibuf[row2 * 240 + col2]; } }#endif}//240x320 to 208x160, resize to 104x80void QVGA2STN_RGB565(char *r_ibuf, char *r_obuf){ int row, col, row2, col2; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; int row_offset = 80; int col_offset = 16; for (row = 0; row < 80; row++) { row2 = row * 2 + row_offset; for (col = 0; col < 104; col++) { col2 = col * 2 + col_offset; obuf[row * 104 + col] = ibuf[row2 * 240 + col2]; } }}//320x240 to 312x240, resize to 104x80void sizeTransform7(char *r_ibuf, char *r_obuf){ int row, col, row2, col2; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; int row_offset = 0; int col_offset = 0; for (col = 0; col < 104; col++) { col2 = col * 3 + col_offset; for (row = 0; row < 80; row++) { row2 = row * 3 + row_offset; obuf[row * 104 + col] = ibuf[row2 * 240 + col2]; } }}//640x480 to 320x240void sizeTransform8(char *r_ibuf, char *r_obuf){ int row, col; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; for (row = 0; row < 240; row++) { for (col = 0; col < 320; col++) { obuf[row * 320 + col] = //ibuf[row * 4 * 1280 + col * 4]; ibuf[row * 2 * 640 + col * 2]; } }}//640x480 resize to 104x80void sizeTransform9(char *r_ibuf, char *r_obuf){ int row, col, row2, col2; unsigned short *ibuf = (unsigned short *) r_ibuf; unsigned short *obuf = (unsigned short *) r_obuf; for (row = 0; row < 80; row++) { row2 = row * 6; for (col = 0; col < 104; col++) { col2 = col * 6; obuf[row * 104 + col] = ibuf[row2 * 640 + col2]; } }}//transform small window to in left-up corner of big window, RGB565.//ow>iw, oh>ih//obuf size should be ow*ohvoid show_in_corner(unsigned short *r_ibuf, int iw, int ih, unsigned short *r_obuf, int ow, int oh){ int x, y; unsigned short *ibuf = r_ibuf; unsigned short *obuf = r_obuf;#ifdef IMGDEBUG printf("%s:iw:%d, ih:%d, ow:%d, oh:%d\n", __FUNCTION__, iw, ih, ow, oh);#endif for (y = 0; y < ih; y++) { for (x = 0; x < iw; x++) obuf[y * ow + x] = ibuf[y * iw + x]; }}//show big window's left-up corner in small window, RGB565.//ow<iw, oh<ih//obuf size should be ow*ohvoid show_corner(unsigned short *r_ibuf, int iw, int ih, unsigned short *r_obuf, int ow, int oh){ int x, y; unsigned short *ibuf = r_ibuf; unsigned short *obuf = r_obuf;#ifdef IMGDEBUG printf("%s:iw:%d, ih:%d, ow:%d, oh:%d\n", __FUNCTION__, iw, ih, ow, oh);#endif for (y = 0; y < oh; y++) { for (x = 0; x < ow; x++) obuf[y * ow + x] = ibuf[y * iw + x]; }}#ifdef FFPLAY//120x160 to 60x80, then fit in middle of 104x80, in yuv//r_ibuf size(120*160*3/2): y:120x160, u:60x80, v:60x80//r_obuf size(104*80*3/2): y:104x80, u:52x40, v:52x40void sizeTransform_qvga2stn_YUV(char *r_ibuf, char *r_obuf){ char *ibuf = r_ibuf; char *obuf = r_obuf; char *yin = ibuf; char *uin = ibuf + 120 * 160; char *vin = ibuf + 120 * 160 + 60 * 80; char *yout = obuf; char *uout = obuf + 104 * 80; char *vout = obuf + 104 * 80 + 52 * 40; int row, row2, col, col2; int row_offset = 22;#ifdef IMGDEBUG printf("yout:%p, uout:%p, vout:%p\n", yout, vout, uout);#endif#if 1 //printf("fill outbuf with zero.\n"); for (row = 0; row < 80; row++) { for (col = 0; col < 104; col++) { yout[row * 104 + col] = 0; uout[row / 2 * 52 + col / 2] = 128; vout[row / 2 * 52 + col / 2] = 128; } }#endif for (row = 0; row < 80; row++) { row2 = row * 2; for (col = 22; col < 82; col++) { col2 = (col - 22) * 2; yout[row * 104 + col] = yin[row2 * 120 + col2]; vout[row / 2 * 52 + col / 2] = vin[row2 / 2 * 60 + col2 / 2]; uout[row / 2 * 52 + col / 2] = uin[row2 / 2 * 60 + col2 / 2];#if 0 if (debug_no == 4) { yout[row * 104 + col] = 74; uout[row / 2 * 52 + col / 2] = 252; vout[row / 2 * 52 + col / 2] = 86; }#endif } }}#endif//QVGA to QCIF(240x320 to 120x160)void QVGA2QCIF(char *buf){ int i, j; unsigned short *ibuf = (unsigned short *) buf; for (j = 0; j < 160; j++) { for (i = 0; i < 120; i++) ibuf[j * 120 + i] = ibuf[j * 2 * 240 + i * 2]; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -