Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d2d397

Browse files
Added function ttob.
1 parent 627b2d7 commit 0d2d397

1 file changed

Lines changed: 41 additions & 4 deletions

File tree

Modules/rgbimgmodule.c

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ static lumrow PROTO((unsigned char *, unsigned char *, int));
9696

9797
static object *ImgfileError;
9898

99+
static int reverse_order;
100+
99101
#ifdef ADD_TAGS
100102
/*
101103
* addlongimgtag -
@@ -339,6 +341,8 @@ longimagedata(self, args)
339341
if(badorder) {
340342
for(z=0; z<zsize; z++) {
341343
lptr = base;
344+
if (reverse_order)
345+
lptr += (ysize - 1) * xsize * sizeof(unsigned long);
342346
for(y=0; y<ysize; y++) {
343347
if(cur != starttab[y+z*ysize]) {
344348
fseek(inf,starttab[y+z*ysize],SEEK_SET);
@@ -356,11 +360,16 @@ longimagedata(self, args)
356360
fread(rledat,lengthtab[y+z*ysize],1,inf);
357361
cur += lengthtab[y+z*ysize];
358362
expandrow(lptr,rledat,3-z);
359-
lptr += xsize * sizeof(unsigned long);
363+
if (reverse_order)
364+
lptr -= xsize * sizeof(unsigned long);
365+
else
366+
lptr += xsize * sizeof(unsigned long);
360367
}
361368
}
362369
} else {
363370
lptr = base;
371+
if (reverse_order)
372+
lptr += (ysize - 1) * xsize * sizeof(unsigned long);
364373
for(y=0; y<ysize; y++) {
365374
for(z=0; z<zsize; z++) {
366375
if(cur != starttab[y+z*ysize]) {
@@ -371,7 +380,10 @@ longimagedata(self, args)
371380
cur += lengthtab[y+z*ysize];
372381
expandrow(lptr,rledat,3-z);
373382
}
374-
lptr += xsize * sizeof(unsigned long);
383+
if (reverse_order)
384+
lptr -= xsize * sizeof(unsigned long);
385+
else
386+
lptr += xsize * sizeof(unsigned long);
375387
}
376388
}
377389
if(zsize == 3)
@@ -398,10 +410,15 @@ longimagedata(self, args)
398410
fseek(inf,512,SEEK_SET);
399411
for(z=0; z<zsize; z++) {
400412
lptr = base;
413+
if (reverse_order)
414+
lptr += (ysize - 1) * xsize * sizeof(unsigned long);
401415
for(y=0; y<ysize; y++) {
402416
fread(verdat,xsize,1,inf);
403417
interleaverow(lptr,verdat,3-z,xsize);
404-
lptr += xsize * sizeof(unsigned long);
418+
if (reverse_order)
419+
lptr -= xsize * sizeof(unsigned long);
420+
else
421+
lptr += xsize * sizeof(unsigned long);
405422
}
406423
}
407424
if(zsize == 3)
@@ -579,6 +596,8 @@ longstoimage(self, args)
579596
goodwrite *= writeheader(outf,&image);
580597
fseek(outf,512+2*tablen,SEEK_SET);
581598
pos = 512+2*tablen;
599+
if (reverse_order)
600+
lptr += (ysize - 1) * xsize * sizeof(unsigned long);
582601
for(y=0; y<ysize; y++) {
583602
for(z=0; z<zsize; z++) {
584603
if(zsize == 1) {
@@ -601,7 +620,10 @@ longstoimage(self, args)
601620
lengthtab[y+z*ysize] = len;
602621
pos += len;
603622
}
604-
lptr += xsize * sizeof(unsigned long);
623+
if (reverse_order)
624+
lptr -= xsize * sizeof(unsigned long);
625+
else
626+
lptr += xsize * sizeof(unsigned long);
605627
}
606628

607629
fseek(outf,512,SEEK_SET);
@@ -694,10 +716,25 @@ int z, cnt;
694716
return optr - (unsigned char *)rlebuf;
695717
}
696718

719+
static object *
720+
ttob(self, args)
721+
object *self;
722+
object *args;
723+
{
724+
int order, oldorder;
725+
726+
if (!getargs(args, "d", &order))
727+
return NULL;
728+
oldorder = reverse_order;
729+
reverse_order = order;
730+
return newintobject(oldorder);
731+
}
732+
697733
static struct methodlist rgbimg_methods[] = {
698734
{"sizeofimage", sizeofimage},
699735
{"longimagedata", longimagedata},
700736
{"longstoimage", longstoimage},
737+
{"ttob", ttob},
701738
{NULL, NULL} /* sentinel */
702739
};
703740

0 commit comments

Comments
 (0)