📄 grblit.c
字号:
pixel[0] = (short)color2; } else if ( val >= 2 ) { /* compose gray value */ int pix = (int)*pixel; int dr = pix & 0xF800; int dg = pix & 0x07E0; int db = pix & 0x001F; dr = pix & 0xF800; dr += ((sr-dr)*val) >> 8; dr &= 0xF800; dg = pix & 0x07E0; dg += ((sg-dg)*val) >> 8; dg &= 0x7E0; db = pix & 0x001F; db += ((sb-db)*val) >> 8; db += 0x001F; *pixel = (short)( dr | dg | db ); } } _write +=2; _read ++; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); } #endif static void blit_gray_to_565( grBlitter* blit, grColor color, int max ) { int y; unsigned char* read; unsigned char* write; long color2; read = blit->read + blit->xread; write = blit->write + 2*blit->xwrite; color2 = color.value; extract565( color2, color ); y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { unsigned char val; val = *_read; if (val) { unsigned short* pixel = (unsigned short*)_write; if (val == max) { pixel[0] = (short)color2; } else { /* compose gray value */ unsigned short pix16 = *pixel; grColor pix; extract565( pix16, pix ); compose_pixel( pix, color, val, max ); *pixel = (short)inject565( pix ); } } _write +=2; _read ++; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); }/**************************************************************************//* *//* <Function> blit_gray_to_24 *//* *//**************************************************************************/#ifdef GRAY8 static void blit_gray8_to_24( grBlitter* blit, grColor color ) { int y; int sr = color.chroma[0]; int sg = color.chroma[1]; int sb = color.chroma[2]; unsigned char* read; unsigned char* write; read = blit->read + blit->xread; write = blit->write + 3*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { unsigned char val; val = *_read; if (val) { if (val >= 254) { _write[0] = (unsigned char)sr; _write[1] = (unsigned char)sg; _write[2] = (unsigned char)sb; } else if ( val >= 2 ) { int dr = _write[0]; int dg = _write[1]; int db = _write[2]; dr += ((sr-dr)*val) >> 8; dg += ((sg-dg)*val) >> 8; db += ((sb-db)*val) >> 8; _write[0] = (unsigned char)dr; _write[1] = (unsigned char)dg, _write[2] = (unsigned char)db; } } _write += 3; _read ++; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); } #endif /* GRAY8 */ static void blit_gray_to_24( grBlitter* blit, grColor color, int max ) { int y; unsigned char* read; unsigned char* write; read = blit->read + blit->xread; write = blit->write + 3*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { unsigned char val; val = *_read; if (val) { if (val == max) { _write[0] = color.chroma[0]; _write[1] = color.chroma[1]; _write[2] = color.chroma[2]; } else { /* compose gray value */ grColor pix; pix.chroma[0] = _write[0]; pix.chroma[1] = _write[1]; pix.chroma[2] = _write[2]; compose_pixel( pix, color, val, max ); _write[0] = pix.chroma[0]; _write[1] = pix.chroma[1]; _write[2] = pix.chroma[2]; } } _write += 3; _read ++; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); }/**************************************************************************//* *//* <Function> blit_gray_to_32 *//* *//**************************************************************************/ static void blit_gray_to_32( grBlitter* blit, grColor color, int max ) { int y; unsigned char* read; unsigned char* write; read = blit->read + blit->xread; write = blit->write + 4*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { unsigned char val; val = *_read; if (val) { if (val == max) { _write[0] = color.chroma[0]; _write[1] = color.chroma[1]; _write[2] = color.chroma[2]; _write[3] = color.chroma[3]; } else { /* compose gray value */ grColor pix; pix.chroma[0] = _write[0]; pix.chroma[1] = _write[1]; pix.chroma[2] = _write[2]; compose_pixel( pix, color, val, max ); _write[0] = pix.chroma[0]; _write[1] = pix.chroma[1]; _write[2] = pix.chroma[2]; } } _write += 4; _read ++; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); } static void blit_gray8_to_32( grBlitter* blit, grColor color ) { blit_gray_to_32( blit, color, 255 ); } /**************************************************************************//* *//* <Function> blit_lcd_to_24 *//* *//**************************************************************************/#ifdef GRAY8 static void blit_lcd8_to_24( grBlitter* blit, grColor color ) { int y; int sr = color.chroma[0]; int sg = color.chroma[1]; int sb = color.chroma[2]; unsigned char* read; unsigned char* write; read = blit->read + 3*blit->xread; write = blit->write + 3*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { int val0, val1, val2; val0 = _read[0]; val1 = _read[1]; val2 = _read[2]; if ( val0 | val1 | val2 ) { if ( val0 == val1 && val0 == val2 && val0 == 255 ) { _write[0] = (unsigned char)sr; _write[1] = (unsigned char)sg; _write[2] = (unsigned char)sb; } else { /* compose gray value */ int dr, dg, db; dr = _write[0]; dr += (sr-dr)*val0 >> 8; dg = _write[1]; dg += (sg-dg)*val1 >> 8; db = _write[1]; db += (sb-db)*val2 >> 8; _write[0] = dr; _write[1] = dg; _write[2] = db; } } _write += 3; _read += 3; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); }#endif /* GRAY8 */ static void blit_lcd_to_24( grBlitter* blit, grColor color, int max ) { int y; unsigned char* read; unsigned char* write; read = blit->read + 3*blit->xread; write = blit->write + 3*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { int val0, val1, val2; val0 = _read[0]; val1 = _read[1]; val2 = _read[2]; if ( val0 | val1 | val2 ) { if ( val0 == val1 && val0 == val2 && val0 == max ) { _write[0] = color.chroma[0]; _write[1] = color.chroma[1]; _write[2] = color.chroma[2]; } else { /* compose gray value */ grColor pix; pix.chroma[0] = _write[0]; pix.chroma[1] = _write[1]; pix.chroma[2] = _write[2]; compose_pixel_full( pix, color, val0, val1, val2, max ); _write[0] = pix.chroma[0]; _write[1] = pix.chroma[1]; _write[2] = pix.chroma[2]; } } _write += 3; _read += 3; x--; } read += blit->read_line; write += blit->write_line; y--; } while (y > 0); }#ifdef GRAY8 static void blit_lcd28_to_24( grBlitter* blit, grColor color ) { int y; int sr = color.chroma[0]; int sg = color.chroma[1]; int sb = color.chroma[2]; unsigned char* read; unsigned char* write; read = blit->read + 3*blit->xread; write = blit->write + 3*blit->xwrite; y = blit->height; do { unsigned char* _read = read; unsigned char* _write = write; int x = blit->width; while (x > 0) { int val0, val1, val2; val0 = _read[2]; val1 = _read[1]; val2 = _read[0]; if ( val0 | val1 | val2 ) { if ( val0 == val1 && val0 == val2 && val0 == 255 ) { _write[0] = (unsigned char)sr; _write[1] = (unsigned char)sg; _write[2] = (unsigned char)sb; } else { /* compose gray value */ int dr, dg, db; dr = _write[0]; dr += (sr-dr)*val0 >> 8; dg = _write[1]; dg += (sg-dg)*val1 >> 8; db = _write[1]; db += (sb-db)*val2 >> 8; _write[0] = dr; _write[1] = dg; _write[2] = db; } } _write += 3; _read += 3; x--; } read += blit->read_line; write += blit->write_line; y--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -