42
42
#include "magick/blob.h"
43
43
#include "magick/blob-private.h"
44
44
#include "magick/color-private.h"
45
#include "magick/colormap.h"
46
45
#include "magick/colormap-private.h"
47
46
#include "magick/constitute.h"
48
47
#include "magick/exception.h"
251
250
b=ReadBlobByte(image);
251
*d=(unsigned long) b;
253
252
b=ReadBlobByte(image);
253
*d+=(unsigned long) b*256l;
257
256
*d=(*d & 0x7FFF) << 16;
258
257
b=ReadBlobByte(image);
258
*d+=(unsigned long) b;
260
259
b=ReadBlobByte(image);
260
*d+=(unsigned long) b*256l;
265
static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
264
static void InsertRow(unsigned char *p,long y,Image *image, int bpp)
291
290
if (q == (PixelPacket *) NULL)
293
292
indexes=GetAuthenticIndexQueue(image);
294
for (x=0; x < ((ssize_t) image->columns-7); x+=8)
293
for (x=0; x < ((long) image->columns-7); x+=8)
296
295
for (bit=0; bit < 8; bit++)
321
320
if (q == (PixelPacket *) NULL)
323
322
indexes=GetAuthenticIndexQueue(image);
324
for (x=0; x < ((ssize_t) image->columns-1); x+=2)
323
for (x=0; x < ((long) image->columns-1); x+=2)
326
325
index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
327
326
indexes[x]=index;
328
*q++=image->colormap[(ssize_t) index];
327
*q++=image->colormap[(long) index];
329
328
index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
330
329
indexes[x]=index;
331
*q++=image->colormap[(ssize_t) index];
330
*q++=image->colormap[(long) index];
332
331
index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
333
332
indexes[x]=index;
334
*q++=image->colormap[(ssize_t) index];
333
*q++=image->colormap[(long) index];
335
334
index=ConstrainColormapIndex(image,(*p) & 0x3);
336
335
indexes[x+1]=index;
337
*q++=image->colormap[(ssize_t) index];
336
*q++=image->colormap[(long) index];
340
339
if ((image->columns % 4) != 0)
342
341
index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
343
342
indexes[x]=index;
344
*q++=image->colormap[(ssize_t) index];
343
*q++=image->colormap[(long) index];
345
344
if ((image->columns % 4) >= 1)
348
347
index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
349
348
indexes[x]=index;
350
*q++=image->colormap[(ssize_t) index];
349
*q++=image->colormap[(long) index];
351
350
if ((image->columns % 4) >= 2)
354
353
index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
355
354
indexes[x]=index;
356
*q++=image->colormap[(ssize_t) index];
355
*q++=image->colormap[(long) index];
369
368
if (q == (PixelPacket *) NULL)
371
370
indexes=GetAuthenticIndexQueue(image);
372
for (x=0; x < ((ssize_t) image->columns-1); x+=2)
371
for (x=0; x < ((long) image->columns-1); x+=2)
374
373
index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
375
374
indexes[x]=index;
376
*q++=image->colormap[(ssize_t) index];
375
*q++=image->colormap[(long) index];
377
376
index=ConstrainColormapIndex(image,(*p) & 0x0f);
378
377
indexes[x+1]=index;
379
*q++=image->colormap[(ssize_t) index];
378
*q++=image->colormap[(long) index];
382
381
if ((image->columns % 2) != 0)
384
383
index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
385
384
indexes[x]=index;
386
*q++=image->colormap[(ssize_t) index];
385
*q++=image->colormap[(long) index];
389
388
if (SyncAuthenticPixels(image,exception) == MagickFalse)
396
395
if (q == (PixelPacket *) NULL) break;
397
396
indexes=GetAuthenticIndexQueue(image);
399
for (x=0; x < (ssize_t) image->columns; x++)
398
for (x=0; x < (long) image->columns; x++)
401
400
index=ConstrainColormapIndex(image,*p);
402
401
indexes[x]=index;
403
*q++=image->colormap[(ssize_t) index];
402
*q++=image->colormap[(long) index];
406
405
if (SyncAuthenticPixels(image,exception) == MagickFalse)
412
411
q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
413
412
if (q == (PixelPacket *) NULL)
415
for (x=0; x < (ssize_t) image->columns; x++)
414
for (x=0; x < (long) image->columns; x++)
417
416
q->red=ScaleCharToQuantum(*p++);
418
417
q->green=ScaleCharToQuantum(*p++);
434
if((ssize_t) x>=ldblk) \
433
if((long) x>=ldblk) \
436
InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
435
InsertRow(BImgBuff,(long) y,image,bpp); \
460
ldblk=(ssize_t) ((bpp*image->columns+7)/8);
459
ldblk=(long) ((bpp*image->columns+7)/8);
461
460
BImgBuff=(unsigned char *) AcquireQuantumMemory((size_t) ldblk,
462
461
sizeof(*BImgBuff));
463
462
if(BImgBuff==NULL) return(-2);
465
while(y<(ssize_t) image->rows)
464
while(y<(long) image->rows)
467
466
bbuf=ReadBlobByte(image);
524
523
BImgBuff[x] = b;\
526
if((ssize_t) x >= ldblk) \
525
if((long) x >= ldblk) \
528
InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
527
InsertRow(BImgBuff,(long) y,image,bpp); \
599
598
(void) fprintf(stderr,
600
"\nUnsupported WPG2 unaligned token RST x=%.20g, please report!\n"
599
"\nUnsupported WPG2 unaligned token RST x=%lu, please report!\n"
605
604
/* duplicate the previous row RunCount x */
606
605
for(i=0;i<=RunCount;i++)
608
InsertRow(BImgBuff,(ssize_t) (image->rows >= y ? y : image->rows-1),
607
InsertRow(BImgBuff,(long) (image->rows >= y ? y : image->rows-1),
648
647
static unsigned LoadWPG2Flags(Image *image,char Precision,float *Angle,tCTM *CTM)
650
649
const unsigned char TPR=1,TRN=2,SKW=4,SCL=8,ROT=0x10,OID=0x20,LCK=0x80;
709
708
static Image *ExtractPostscript(Image *image,const ImageInfo *image_info,
710
MagickOffsetType PS_Offset,ssize_t PS_Size,ExceptionInfo *exception)
709
MagickOffsetType PS_Offset,long PS_Size,ExceptionInfo *exception)
713
712
postscript_file[MaxTextExtent];
952
948
assert(image_info->signature == MagickSignature);
953
949
assert(exception != (ExceptionInfo *) NULL);
954
950
assert(exception->signature == MagickSignature);
956
951
image=AcquireImage(image_info);
958
953
status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
1046
1041
if(Rec.RecordLength > 8)
1047
1042
image=ExtractPostscript(image,image_info,
1048
1043
TellBlob(image)+8, /* skip PS header in the wpg */
1049
(ssize_t) Rec.RecordLength-8,exception);
1044
(long) Rec.RecordLength-8,exception);
1052
1047
case 0x14: /* bitmap type 2 */
1101
if ( (image->colors < (one << bpp)) && (bpp != 24) )
1096
if ( (image->colors < (1UL<<bpp)) && (bpp != 24) )
1102
1097
image->colormap=(PixelPacket *) ResizeQuantumMemory(
1103
image->colormap,(size_t) (one << bpp),
1098
image->colormap,(size_t) (1UL << bpp),
1104
1099
sizeof(*image->colormap));
1172
1167
if(Rec.RecordLength>0x3C)
1173
1168
image=ExtractPostscript(image,image_info,
1174
1169
TellBlob(image)+0x3C, /* skip PS l2 header in the wpg */
1175
(ssize_t) Rec.RecordLength-0x3C,exception);
1170
(long) Rec.RecordLength-0x3C,exception);
1261
1256
if ((image->colors == 0) && (bpp != 24))
1267
image->colors=one << bpp;
1258
image->colors=1 << bpp;
1268
1259
if (!AcquireImageColormap(image,image->colors))
1274
if( image->colors<(one << bpp) && bpp!=24 )
1265
if( image->colors<(1UL<<bpp) && bpp!=24 )
1275
1266
image->colormap=(PixelPacket *) ResizeQuantumMemory(
1276
image->colormap,(size_t) (one << bpp),
1267
image->colormap,(size_t) (1UL << bpp),
1277
1268
sizeof(*image->colormap));
1283
1274
case 0: /*Uncompressed raster*/
1285
ldblk=(ssize_t) ((bpp*image->columns+7)/8);
1276
ldblk=(long) ((bpp*image->columns+7)/8);
1286
1277
BImgBuff=(unsigned char *) AcquireQuantumMemory((size_t)
1287
1278
ldblk,sizeof(*BImgBuff));
1288
1279
if (BImgBuff == (unsigned char *) NULL)
1291
for(i=0; i< (ssize_t) image->rows; i++)
1282
for(i=0; i< (long) image->rows; i++)
1293
1284
(void) ReadBlob(image,ldblk,BImgBuff);
1294
1285
InsertRow(BImgBuff,i,image,bpp);
1350
1341
if(Rec2.RecordLength > (unsigned int) i)
1351
1342
image=ExtractPostscript(image,image_info,
1352
1343
TellBlob(image)+i, /*skip PS header in the wpg2*/
1353
(ssize_t) (Rec2.RecordLength-i-2),exception);
1344
(long) (Rec2.RecordLength-i-2),exception);
1356
1347
case 0x1B: /*bitmap rectangle*/
1397
1388
Fix scene numbers.
1399
1390
for (p=image; p != (Image *) NULL; p=p->next)
1400
p->scene=(size_t) scene++;
1391
p->scene=(unsigned long) scene++;
1402
1393
if (image == (Image *) NULL)
1403
1394
ThrowReaderException(CorruptImageError,
1426
1417
% The format of the RegisterWPGImage method is:
1428
% size_t RegisterWPGImage(void)
1419
% unsigned long RegisterWPGImage(void)
1431
ModuleExport size_t RegisterWPGImage(void)
1422
ModuleExport unsigned long RegisterWPGImage(void)