1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- * The Python Imaging Library.
- * $Id$
- *
- * encoder for EPS hex data
- *
- * history:
- * 96-04-19 fl created
- * 96-06-27 fl don't drop last block of encoded data
- *
- * notes:
- * FIXME: rename to HexEncode.c ??
- *
- * Copyright (c) Fredrik Lundh 1996.
- * Copyright (c) Secret Labs AB 1997.
- *
- * See the README file for information on usage and redistribution.
- */
- #include "Imaging.h"
- int
- ImagingEpsEncode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
- {
- enum { HEXBYTE=1, NEWLINE };
- const char *hex = "0123456789abcdef";
- UINT8* ptr = buf;
- UINT8* in, i;
- if (!state->state) {
- state->state = HEXBYTE;
- state->xsize *= im->pixelsize; /* Hack! */
- }
- in = (UINT8*) im->image[state->y];
- for (;;) {
- if (state->state == NEWLINE) {
- if (bytes < 1)
- break;
- *ptr++ = '\n';
- bytes--;
- state->state = HEXBYTE;
- }
- if (bytes < 2)
- break;
- i = in[state->x++];
- *ptr++ = hex[(i>>4)&15];
- *ptr++ = hex[i&15];
- bytes -= 2;
- /* Skip junk bytes */
- if (im->bands == 3 && (state->x & 3) == 3)
- state->x++;
- if (++state->count >= 79/2) {
- state->state = NEWLINE;
- state->count = 0;
- }
- if (state->x >= state->xsize) {
- state->x = 0;
- if (++state->y >= state->ysize) {
- state->errcode = IMAGING_CODEC_END;
- break;
- }
- in = (UINT8*) im->image[state->y];
- }
- }
- return ptr - buf;
- }
|