Пример #1
0
/***************************************************************************
**
** encline
**
** Encode a line for RLE PCX image data
*/
static int encline(unsigned char *line, int length, FILE *fp)
{
	int             local, last;
    int             srcindex;
	int             runcount;
    int             total;

    last = *line++;
	runcount = 1;
    srcindex = 1;
	total = 0;
    while (srcindex < length) {
		local = *line++;
        srcindex++;
		if (local == last) {
            runcount++;
			if (runcount == 0x3f) {
                if (encput(last, runcount, fp)) {
					return 1;
                }
				total += runcount;
                runcount = 0;
			}
        }
		else {
            if (runcount) {
				if (encput(last,runcount,fp)) {
                    return 1;
				}
                total += runcount;
			}
            last = local;
			runcount = 1;
        }
	}
    if (runcount) {
		if (encput(last, runcount, fp)) {
            return 1;
		}
        total += runcount;
	}
    return 0;
}
Пример #2
0
// PACKING //
int16_t encLine(uchar *inBuff, int16_t inLen,uchar *buf, int16_t outLen)
{
uchar curr,last;
uint16_t scrIndex;
uint16_t total;
uchar runCount;

total    = 0;
runCount = 1;
last     = *inBuff;

for( scrIndex=1;scrIndex<inLen&&total<outLen;scrIndex++)
	{
	curr = *(++inBuff);
	if( curr==last )	// There is a "run" in the data, encode it //
		{
		runCount++;
		if( runCount==63 )
			{
			total += encput(last,runCount,&buf[total]);
			runCount = 0;
			}
		}
	else			// No "run" - curr!=last	//
		{
		if( runCount )
			total += encput(last,runCount,&buf[total]);
		last = curr;
		runCount = 1;
		}
	}	// endloop 	//

if( runCount )	// finish up 	//
	return total+encput(last,runCount,&buf[total]) ;

return total;
}