* src/base/ftbitmap.c (FT_Bitmap_Convert): Improve.
This commit completes argument checks and adds support for different flow directions.
This commit is contained in:
parent
6de761744c
commit
644d6fab7e
|
@ -1,3 +1,10 @@
|
||||||
|
2014-11-21 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
* src/base/ftbitmap.c (FT_Bitmap_Convert): Improve.
|
||||||
|
|
||||||
|
This commit completes argument checks and adds support for different
|
||||||
|
flow directions.
|
||||||
|
|
||||||
2014-11-21 Werner Lemberg <wl@gnu.org>
|
2014-11-21 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
* src/base/ftbitmap.c (FT_Bitmap_Copy): Improve.
|
* src/base/ftbitmap.c (FT_Bitmap_Copy): Improve.
|
||||||
|
|
|
@ -471,12 +471,16 @@
|
||||||
FT_Error error = FT_Err_Ok;
|
FT_Error error = FT_Err_Ok;
|
||||||
FT_Memory memory;
|
FT_Memory memory;
|
||||||
|
|
||||||
FT_Int source_pitch, target_pitch;
|
FT_Byte* s;
|
||||||
|
FT_Byte* t;
|
||||||
|
|
||||||
|
|
||||||
if ( !library )
|
if ( !library )
|
||||||
return FT_THROW( Invalid_Library_Handle );
|
return FT_THROW( Invalid_Library_Handle );
|
||||||
|
|
||||||
|
if ( !source || !target )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
memory = library->memory;
|
memory = library->memory;
|
||||||
|
|
||||||
switch ( source->pixel_mode )
|
switch ( source->pixel_mode )
|
||||||
|
@ -489,7 +493,7 @@
|
||||||
case FT_PIXEL_MODE_LCD_V:
|
case FT_PIXEL_MODE_LCD_V:
|
||||||
case FT_PIXEL_MODE_BGRA:
|
case FT_PIXEL_MODE_BGRA:
|
||||||
{
|
{
|
||||||
FT_Int pad, old_target_pitch;
|
FT_Int pad, old_target_pitch, target_pitch;
|
||||||
FT_ULong old_size;
|
FT_ULong old_size;
|
||||||
|
|
||||||
|
|
||||||
|
@ -530,17 +534,20 @@
|
||||||
error = FT_THROW( Invalid_Argument );
|
error = FT_THROW( Invalid_Argument );
|
||||||
}
|
}
|
||||||
|
|
||||||
source_pitch = source->pitch;
|
s = source->buffer;
|
||||||
if ( source_pitch < 0 )
|
t = target->buffer;
|
||||||
source_pitch = -source_pitch;
|
|
||||||
|
/* take care of bitmap flow */
|
||||||
|
if ( source->pitch < 0 )
|
||||||
|
s -= source->pitch * ( source->rows - 1 );
|
||||||
|
if ( target->pitch < 0 )
|
||||||
|
t -= target->pitch * ( target->rows - 1 );
|
||||||
|
|
||||||
switch ( source->pixel_mode )
|
switch ( source->pixel_mode )
|
||||||
{
|
{
|
||||||
case FT_PIXEL_MODE_MONO:
|
case FT_PIXEL_MODE_MONO:
|
||||||
{
|
{
|
||||||
FT_Byte* s = source->buffer;
|
FT_UInt i;
|
||||||
FT_Byte* t = target->buffer;
|
|
||||||
FT_Int i;
|
|
||||||
|
|
||||||
|
|
||||||
target->num_grays = 2;
|
target->num_grays = 2;
|
||||||
|
@ -549,7 +556,7 @@
|
||||||
{
|
{
|
||||||
FT_Byte* ss = s;
|
FT_Byte* ss = s;
|
||||||
FT_Byte* tt = t;
|
FT_Byte* tt = t;
|
||||||
FT_Int j;
|
FT_UInt j;
|
||||||
|
|
||||||
|
|
||||||
/* get the full bytes */
|
/* get the full bytes */
|
||||||
|
@ -586,8 +593,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s += source_pitch;
|
s += source->pitch;
|
||||||
t += target_pitch;
|
t += target->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -597,10 +604,8 @@
|
||||||
case FT_PIXEL_MODE_LCD:
|
case FT_PIXEL_MODE_LCD:
|
||||||
case FT_PIXEL_MODE_LCD_V:
|
case FT_PIXEL_MODE_LCD_V:
|
||||||
{
|
{
|
||||||
FT_Int width = source->width;
|
FT_Int width = source->width;
|
||||||
FT_Byte* s = source->buffer;
|
FT_UInt i;
|
||||||
FT_Byte* t = target->buffer;
|
|
||||||
FT_Int i;
|
|
||||||
|
|
||||||
|
|
||||||
target->num_grays = 256;
|
target->num_grays = 256;
|
||||||
|
@ -609,8 +614,8 @@
|
||||||
{
|
{
|
||||||
FT_ARRAY_COPY( t, s, width );
|
FT_ARRAY_COPY( t, s, width );
|
||||||
|
|
||||||
s += source_pitch;
|
s += source->pitch;
|
||||||
t += target_pitch;
|
t += target->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -618,9 +623,7 @@
|
||||||
|
|
||||||
case FT_PIXEL_MODE_GRAY2:
|
case FT_PIXEL_MODE_GRAY2:
|
||||||
{
|
{
|
||||||
FT_Byte* s = source->buffer;
|
FT_UInt i;
|
||||||
FT_Byte* t = target->buffer;
|
|
||||||
FT_Int i;
|
|
||||||
|
|
||||||
|
|
||||||
target->num_grays = 4;
|
target->num_grays = 4;
|
||||||
|
@ -629,7 +632,7 @@
|
||||||
{
|
{
|
||||||
FT_Byte* ss = s;
|
FT_Byte* ss = s;
|
||||||
FT_Byte* tt = t;
|
FT_Byte* tt = t;
|
||||||
FT_Int j;
|
FT_UInt j;
|
||||||
|
|
||||||
|
|
||||||
/* get the full bytes */
|
/* get the full bytes */
|
||||||
|
@ -661,8 +664,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s += source_pitch;
|
s += source->pitch;
|
||||||
t += target_pitch;
|
t += target->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -670,9 +673,7 @@
|
||||||
|
|
||||||
case FT_PIXEL_MODE_GRAY4:
|
case FT_PIXEL_MODE_GRAY4:
|
||||||
{
|
{
|
||||||
FT_Byte* s = source->buffer;
|
FT_UInt i;
|
||||||
FT_Byte* t = target->buffer;
|
|
||||||
FT_Int i;
|
|
||||||
|
|
||||||
|
|
||||||
target->num_grays = 16;
|
target->num_grays = 16;
|
||||||
|
@ -681,7 +682,7 @@
|
||||||
{
|
{
|
||||||
FT_Byte* ss = s;
|
FT_Byte* ss = s;
|
||||||
FT_Byte* tt = t;
|
FT_Byte* tt = t;
|
||||||
FT_Int j;
|
FT_UInt j;
|
||||||
|
|
||||||
|
|
||||||
/* get the full bytes */
|
/* get the full bytes */
|
||||||
|
@ -700,8 +701,8 @@
|
||||||
if ( source->width & 1 )
|
if ( source->width & 1 )
|
||||||
tt[0] = (FT_Byte)( ( ss[0] & 0xF0 ) >> 4 );
|
tt[0] = (FT_Byte)( ( ss[0] & 0xF0 ) >> 4 );
|
||||||
|
|
||||||
s += source_pitch;
|
s += source->pitch;
|
||||||
t += target_pitch;
|
t += target->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -709,9 +710,7 @@
|
||||||
|
|
||||||
case FT_PIXEL_MODE_BGRA:
|
case FT_PIXEL_MODE_BGRA:
|
||||||
{
|
{
|
||||||
FT_Byte* s = source->buffer;
|
FT_UInt i;
|
||||||
FT_Byte* t = target->buffer;
|
|
||||||
FT_Int i;
|
|
||||||
|
|
||||||
|
|
||||||
target->num_grays = 256;
|
target->num_grays = 256;
|
||||||
|
@ -720,7 +719,7 @@
|
||||||
{
|
{
|
||||||
FT_Byte* ss = s;
|
FT_Byte* ss = s;
|
||||||
FT_Byte* tt = t;
|
FT_Byte* tt = t;
|
||||||
FT_Int j;
|
FT_UInt j;
|
||||||
|
|
||||||
|
|
||||||
for ( j = source->width; j > 0; j-- )
|
for ( j = source->width; j > 0; j-- )
|
||||||
|
@ -731,8 +730,8 @@
|
||||||
tt += 1;
|
tt += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s += source_pitch;
|
s += source->pitch;
|
||||||
t += target_pitch;
|
t += target->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue