📄 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 + -