📄 pix_map_base_routines.c
字号:
else
{
*(unsigned short *)(dest_line_ptr) = src_pixel;
}
alpha_line_ptr += 1;
src_line_ptr += 2;
dest_line_ptr += 2;
}
alpha_ptr += alpha_increment;
src_ptr += src_increment;
dest_ptr += dest_increment;
}
}
void blend_8_with_16_to_24(
void *alpha_ptr,
long alpha_active_width,
long alpha_active_height,
long alpha_color,
long alpha_line_width,
void *src_ptr,
long src_line_width,
void *dest_ptr,
long dest_line_width
)
{
int row, col;
void *alpha_line_ptr, *src_line_ptr, *dest_line_ptr;
long alpha_increment, src_increment, dest_increment;
unsigned char alpha_red, alpha_green, alpha_blue;
unsigned char src_red, src_green, src_blue;
unsigned char dest_red, dest_green, dest_blue;
unsigned char next_alpha;
unsigned short src_pixel;
alpha_red = (alpha_color >> 0) & 0x000000ff;
alpha_green = (alpha_color >> 8) & 0x000000ff;
alpha_blue = (alpha_color >> 16) & 0x000000ff;
alpha_increment = alpha_line_width;
src_increment = src_line_width + src_line_width;
dest_increment = dest_line_width + dest_line_width + dest_line_width;
for( row = 0 ; row < alpha_active_height ; row++ )
{
alpha_line_ptr = alpha_ptr;
src_line_ptr = src_ptr;
dest_line_ptr = dest_ptr;
for( col = 0 ; col < alpha_active_width ; col++ )
{
src_pixel = *(unsigned short *)(src_line_ptr);
src_red = ( ( src_pixel >> 11 ) & 0x1f ) << 3;
src_green = ( ( src_pixel >> 5 ) & 0x3f ) << 2;
src_blue = ( ( src_pixel >> 0 ) & 0x1f ) << 3;
next_alpha = (*(unsigned char *)(alpha_line_ptr));
if(next_alpha)
{
dest_red = ( ( next_alpha * ( alpha_red - src_red ) ) >> 8 ) + src_red;
dest_green = ( ( next_alpha * ( alpha_green - src_green ) ) >> 8 ) + src_green;
dest_blue = ( ( next_alpha * ( alpha_blue - src_blue ) ) >> 8 ) + src_blue;
*(unsigned char *)(dest_line_ptr) = dest_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_blue;
dest_line_ptr += 1;
}
else
{
*(unsigned char *)(dest_line_ptr) = src_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_blue;
dest_line_ptr += 1;
}
alpha_line_ptr += 1;
src_line_ptr += 2;
}
alpha_ptr += alpha_increment;
src_ptr += src_increment;
dest_ptr += dest_increment;
}
}
void blend_8_with_16_to_32(
void *alpha_ptr,
long alpha_active_width,
long alpha_active_height,
long alpha_color,
long alpha_line_width,
void *src_ptr,
long src_line_width,
void *dest_ptr,
long dest_line_width
)
{
int row, col;
void *alpha_line_ptr, *src_line_ptr, *dest_line_ptr;
long alpha_increment, src_increment, dest_increment;
unsigned char alpha_red, alpha_green, alpha_blue;
unsigned char src_red, src_green, src_blue;
unsigned char dest_red, dest_green, dest_blue;
unsigned char next_alpha;
unsigned short src_pixel;
alpha_red = (alpha_color >> 0) & 0x000000ff;
alpha_green = (alpha_color >> 8) & 0x000000ff;
alpha_blue = (alpha_color >> 16) & 0x000000ff;
alpha_increment = alpha_line_width;
src_increment = src_line_width + src_line_width;
dest_increment = dest_line_width + dest_line_width + dest_line_width + dest_line_width;
for( row = 0 ; row < alpha_active_height ; row++ )
{
alpha_line_ptr = alpha_ptr;
src_line_ptr = src_ptr;
dest_line_ptr = dest_ptr;
for( col = 0 ; col < alpha_active_width ; col++ )
{
src_pixel = *(unsigned short *)(src_line_ptr);
src_red = ( ( src_pixel >> 11 ) & 0x1f ) << 3;
src_green = ( ( src_pixel >> 5 ) & 0x3f ) << 2;
src_blue = ( ( src_pixel >> 0 ) & 0x1f ) << 3;
next_alpha = (*(unsigned char *)(alpha_line_ptr));
if(next_alpha)
{
dest_red = ( ( next_alpha * ( alpha_red - src_red ) ) >> 8 ) + src_red;
dest_green = ( ( next_alpha * ( alpha_green - src_green ) ) >> 8 ) + src_green;
dest_blue = ( ( next_alpha * ( alpha_blue - src_blue ) ) >> 8 ) + src_blue;
*(unsigned char *)(dest_line_ptr) = dest_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_blue;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = 0xff;
dest_line_ptr += 1;
}
else
{
*(unsigned char *)(dest_line_ptr) = src_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_blue;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = 0xff;
dest_line_ptr += 1;
}
alpha_line_ptr += 1;
src_line_ptr += 2;
}
alpha_ptr += alpha_increment;
src_ptr += src_increment;
dest_ptr += dest_increment;
}
}
void blend_8_with_24_to_16(
void *alpha_ptr,
long alpha_active_width,
long alpha_active_height,
long alpha_color,
long alpha_line_width,
void *src_ptr,
long src_line_width,
void *dest_ptr,
long dest_line_width
)
{
int row, col;
void *alpha_line_ptr, *src_line_ptr, *dest_line_ptr;
long alpha_increment, src_increment, dest_increment;
unsigned char alpha_red, alpha_green, alpha_blue;
unsigned char src_red, src_green, src_blue;
unsigned char dest_red, dest_green, dest_blue;
unsigned char next_alpha;
alpha_red = (alpha_color >> 0) & 0x000000ff;
alpha_green = (alpha_color >> 8) & 0x000000ff;
alpha_blue = (alpha_color >> 16) & 0x000000ff;
alpha_increment = alpha_line_width;
src_increment = src_line_width + src_line_width + src_line_width;
dest_increment = dest_line_width + dest_line_width;
for( row = 0 ; row < alpha_active_height ; row++ )
{
alpha_line_ptr = alpha_ptr;
src_line_ptr = src_ptr;
dest_line_ptr = dest_ptr;
for( col = 0 ; col < alpha_active_width ; col++ )
{
src_red = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_green = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_blue = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
next_alpha = (*(unsigned char *)(alpha_line_ptr));
if(next_alpha)
{
dest_red = ( ( next_alpha * ( alpha_red - src_red ) ) >> 8 ) + src_red;
dest_green = ( ( next_alpha * ( alpha_green - src_green ) ) >> 8 ) + src_green;
dest_blue = ( ( next_alpha * ( alpha_blue - src_blue ) ) >> 8 ) + src_blue;
*(unsigned short *)(dest_line_ptr) = ((( dest_red >> 3 ) & 0x1f ) << 11 ) |
((( dest_green >> 2 ) & 0x3f ) << 5 ) |
((( dest_blue >> 3 ) & 0x1f ) << 0 );
}
else
{
*(unsigned short *)(dest_line_ptr) = ((( src_red >> 3 ) & 0x1f ) << 11 ) |
((( src_green >> 2 ) & 0x3f ) << 5 ) |
((( src_blue >> 3 ) & 0x1f ) << 0 );
}
alpha_line_ptr += 1;
dest_line_ptr += 2;
}
alpha_ptr += alpha_increment;
src_ptr += src_increment;
dest_ptr += dest_increment;
}
}
void blend_8_with_24_to_24(
void *alpha_ptr,
long alpha_active_width,
long alpha_active_height,
long alpha_color,
long alpha_line_width,
void *src_ptr,
long src_line_width,
void *dest_ptr,
long dest_line_width
)
{
int row, col;
void *alpha_line_ptr, *src_line_ptr, *dest_line_ptr;
long alpha_increment, src_increment, dest_increment;
unsigned char alpha_red, alpha_green, alpha_blue;
unsigned char src_red, src_green, src_blue;
unsigned char dest_red, dest_green, dest_blue;
unsigned char next_alpha;
alpha_red = (alpha_color >> 0) & 0x000000ff;
alpha_green = (alpha_color >> 8) & 0x000000ff;
alpha_blue = (alpha_color >> 16) & 0x000000ff;
alpha_increment = alpha_line_width;
src_increment = src_line_width + src_line_width + src_line_width;
dest_increment = dest_line_width + dest_line_width + dest_line_width;
for( row = 0 ; row < alpha_active_height ; row++ )
{
alpha_line_ptr = alpha_ptr;
src_line_ptr = src_ptr;
dest_line_ptr = dest_ptr;
for( col = 0 ; col < alpha_active_width ; col++ )
{
src_red = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_green = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_blue = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
next_alpha = (*(unsigned char *)(alpha_line_ptr));
if(next_alpha)
{
dest_red = ( ( next_alpha * ( alpha_red - src_red ) ) >> 8 ) + src_red;
dest_green = ( ( next_alpha * ( alpha_green - src_green ) ) >> 8 ) + src_green;
dest_blue = ( ( next_alpha * ( alpha_blue - src_blue ) ) >> 8 ) + src_blue;
*(unsigned char *)(dest_line_ptr) = dest_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_blue;
dest_line_ptr += 1;
}
else
{
*(unsigned char *)(dest_line_ptr) = src_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_green;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = src_blue;
dest_line_ptr += 1;
}
alpha_line_ptr += 1;
}
alpha_ptr += alpha_increment;
src_ptr += src_increment;
dest_ptr += dest_increment;
}
}
void blend_8_with_24_to_32(
void *alpha_ptr,
long alpha_active_width,
long alpha_active_height,
long alpha_color,
long alpha_line_width,
void *src_ptr,
long src_line_width,
void *dest_ptr,
long dest_line_width
)
{
int row, col;
void *alpha_line_ptr, *src_line_ptr, *dest_line_ptr;
long alpha_increment, src_increment, dest_increment;
unsigned char alpha_red, alpha_green, alpha_blue;
unsigned char src_red, src_green, src_blue;
unsigned char dest_red, dest_green, dest_blue;
unsigned char next_alpha;
alpha_red = (alpha_color >> 0) & 0x000000ff;
alpha_green = (alpha_color >> 8) & 0x000000ff;
alpha_blue = (alpha_color >> 16) & 0x000000ff;
alpha_increment = alpha_line_width;
src_increment = src_line_width + src_line_width + src_line_width;
dest_increment = dest_line_width + dest_line_width + dest_line_width + dest_line_width;
for( row = 0 ; row < alpha_active_height ; row++ )
{
alpha_line_ptr = alpha_ptr;
src_line_ptr = src_ptr;
dest_line_ptr = dest_ptr;
for( col = 0 ; col < alpha_active_width ; col++ )
{
src_red = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_green = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
src_blue = (*(unsigned char *)(src_line_ptr));
src_line_ptr += 1;
next_alpha = (*(unsigned char *)(alpha_line_ptr));
if(next_alpha)
{
dest_red = ( ( next_alpha * ( alpha_red - src_red ) ) >> 8 ) + src_red;
dest_green = ( ( next_alpha * ( alpha_green - src_green ) ) >> 8 ) + src_green;
dest_blue = ( ( next_alpha * ( alpha_blue - src_blue ) ) >> 8 ) + src_blue;
*(unsigned char *)(dest_line_ptr) = dest_red;
dest_line_ptr += 1;
*(unsigned char *)(dest_line_ptr) = dest_green;
dest_line
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -