1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# include "bitmapConfig.h"
# include "bmintern.h"
# include "bmgetrow.h"
# include "bmputrow.h"
# include <string.h>
# include <appDebugon.h>
/************************************************************************/
/* */
/* Manage FillJob's for image conversion. */
/* */
/************************************************************************/
static void scanFillDitherTables( FillJob * fj )
{
int i;
for ( i= -256; i < 0; i++ )
{
fj->fjDc1[i+256]= -( ( 8- 1*i+ 8 )/ 16 );
fj->fjDc3[i+256]= -( ( 8- 3*i+ 8 )/ 16 );
fj->fjDc5[i+256]= -( ( 8- 5*i+ 8 )/ 16 );
fj->fjDc7[i+256]= -( ( 8- 7*i+ 8 )/ 16 );
}
for ( i= 0; i < 256; i++ )
{
fj->fjDc1[i+256]= ( 1*i+ 8 )/ 16;
fj->fjDc3[i+256]= ( 3*i+ 8 )/ 16;
fj->fjDc5[i+256]= ( 5*i+ 8 )/ 16;
fj->fjDc7[i+256]= ( 7*i+ 8 )/ 16;
}
}
void bmInitFillJob( FillJob * fj )
{
int i;
fj->fjColorAllocator= (ColorAllocator *)0;
fj->fjFrWide= 0;
fj->fjToWide= 0;
fj->fjDither= 0;
fj->fjScratch= (unsigned char *)0;
fj->fjThisRow= (ColorValue *)0;
fj->fjNextCor= (ColorValue *)0;
fj->fjNextRow= (ColorValue *)0;
fj->fjPrevRow= (ColorValue *)0;
for ( i= 0; i < 512; i++ )
{
fj->fjDc1[i]= 0;
fj->fjDc3[i]= 0;
fj->fjDc5[i]= 0;
fj->fjDc7[i]= 0;
}
return;
}
void bmCleanFillJob( FillJob * fj )
{
if ( fj->fjScratch )
{ free( fj->fjScratch ); }
if ( fj->fjThisRow )
{ free( fj->fjThisRow ); }
if ( fj->fjNextCor )
{ free( fj->fjNextCor ); }
if ( fj->fjNextRow )
{ free( fj->fjNextRow ); }
if ( fj->fjPrevRow )
{ free( fj->fjPrevRow ); }
return;
}
int bmSetFillJob( FillJob * fj,
ColorAllocator * ca,
int frWide,
int toWide,
int scratchSize,
int dither )
{
fj->fjFrWide= frWide;
fj->fjToWide= toWide;
fj->fjColorAllocator= ca;
if ( scratchSize > 0 )
{
fj->fjScratch= malloc( scratchSize );
if ( ! fj->fjScratch )
{ LXDEB(scratchSize,fj->fjScratch); return -1; }
}
if ( dither )
{
fj->fjDither= 1;
scanFillDitherTables( fj );
}
/* 1 */
fj->fjThisRow= (ColorValue *)malloc( ( frWide+ 9 )* sizeof(ColorValue) );
if ( ! fj->fjThisRow )
{ LXDEB(frWide,fj->fjThisRow); return -1; }
fj->fjNextCor= (ColorValue *)malloc( ( toWide+ 9 )* sizeof(ColorValue) );
if ( ! fj->fjNextCor )
{ LXDEB(toWide,fj->fjNextCor); return -1; }
fj->fjNextRow= (ColorValue *)malloc( ( frWide+ 9 )* sizeof(ColorValue) );
if ( ! fj->fjNextRow )
{ LXDEB(frWide,fj->fjNextRow); return -1; }
fj->fjPrevRow= (ColorValue *)malloc( ( frWide+ 9 )* sizeof(ColorValue) );
if ( ! fj->fjPrevRow )
{ LXDEB(frWide,fj->fjPrevRow); return -1; }
return 0;
}
|