[trunk] Import patch from issue 171. Only the imagetoraw part was not applied.
Update issue 171
This commit is contained in:
parent
86cdc91180
commit
6a6fa7027a
|
@ -406,7 +406,7 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||||
int imagetotga(opj_image_t * image, const char *outfile) {
|
int imagetotga(opj_image_t * image, const char *outfile) {
|
||||||
int width, height, bpp, x, y;
|
int width, height, bpp, x, y;
|
||||||
OPJ_BOOL write_alpha;
|
OPJ_BOOL write_alpha;
|
||||||
int i, adjustR, adjustG, adjustB;
|
int i, v, adjustR, adjustG, adjustB, fails;
|
||||||
unsigned int alpha_channel;
|
unsigned int alpha_channel;
|
||||||
float r,g,b,a;
|
float r,g,b,a;
|
||||||
unsigned char value;
|
unsigned char value;
|
||||||
|
@ -437,8 +437,9 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||||
|
|
||||||
/* Write TGA header */
|
/* Write TGA header */
|
||||||
bpp = write_alpha ? 32 : 24;
|
bpp = write_alpha ? 32 : 24;
|
||||||
|
|
||||||
if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE))
|
if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE))
|
||||||
return 1;
|
goto fin;
|
||||||
|
|
||||||
alpha_channel = image->numcomps-1;
|
alpha_channel = image->numcomps-1;
|
||||||
|
|
||||||
|
@ -448,56 +449,74 @@ int imagetotga(opj_image_t * image, const char *outfile) {
|
||||||
adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
|
adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
|
||||||
adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
|
adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
|
||||||
|
|
||||||
for (y=0; y < height; y++) {
|
for (y=0; y < height; y++)
|
||||||
|
{
|
||||||
unsigned int index=y*width;
|
unsigned int index=y*width;
|
||||||
|
|
||||||
for (x=0; x < width; x++, index++) {
|
for (x=0; x < width; x++, index++)
|
||||||
|
{
|
||||||
r = (float)(image->comps[0].data[index] + adjustR);
|
r = (float)(image->comps[0].data[index] + adjustR);
|
||||||
|
|
||||||
if (image->numcomps>2) {
|
if (image->numcomps > 2)
|
||||||
|
{
|
||||||
g = (float)(image->comps[1].data[index] + adjustG);
|
g = (float)(image->comps[1].data[index] + adjustG);
|
||||||
b = (float)(image->comps[2].data[index] + adjustB);
|
b = (float)(image->comps[2].data[index] + adjustB);
|
||||||
}
|
}
|
||||||
else {/* Greyscale ... */
|
else
|
||||||
|
{/* Greyscale ... */
|
||||||
g = r;
|
g = r;
|
||||||
b = r;
|
b = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TGA format writes BGR ... */
|
/* TGA format writes BGR ... */
|
||||||
|
if(b > 255.) b = 255.; else if(b < 0.) b = 0.;
|
||||||
value = (unsigned char)(b*scale);
|
value = (unsigned char)(b*scale);
|
||||||
res = fwrite(&value,1,1,fdest);
|
res = fwrite(&value,1,1,fdest);
|
||||||
if( res < 1 ) {
|
|
||||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if( res < 1 )
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||||
|
goto fin;
|
||||||
|
}
|
||||||
|
if(g > 255.) g = 255.; else if(g < 0.) g = 0.;
|
||||||
value = (unsigned char)(g*scale);
|
value = (unsigned char)(g*scale);
|
||||||
res = fwrite(&value,1,1,fdest);
|
res = fwrite(&value,1,1,fdest);
|
||||||
if( res < 1 ) {
|
|
||||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if( res < 1 )
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||||
|
goto fin;
|
||||||
|
}
|
||||||
|
if(r > 255.) r = 255.; else if(r < 0.) r = 0.;
|
||||||
value = (unsigned char)(r*scale);
|
value = (unsigned char)(r*scale);
|
||||||
res = fwrite(&value,1,1,fdest);
|
res = fwrite(&value,1,1,fdest);
|
||||||
if( res < 1 ) {
|
|
||||||
|
if( res < 1 )
|
||||||
|
{
|
||||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||||
return 1;
|
goto fin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (write_alpha) {
|
if (write_alpha)
|
||||||
|
{
|
||||||
a = (float)(image->comps[alpha_channel].data[index]);
|
a = (float)(image->comps[alpha_channel].data[index]);
|
||||||
|
if(a > 255.) a = 255.; else if(a < 0.) a = 0.;
|
||||||
value = (unsigned char)(a*scale);
|
value = (unsigned char)(a*scale);
|
||||||
res = fwrite(&value,1,1,fdest);
|
res = fwrite(&value,1,1,fdest);
|
||||||
if( res < 1 ) {
|
|
||||||
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
if( res < 1 )
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
|
||||||
|
goto fin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fails = 0;
|
||||||
|
fin:
|
||||||
|
fclose(fdest);
|
||||||
|
|
||||||
|
return fails;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -->> -->> -->> -->>
|
/* -->> -->> -->> -->>
|
||||||
|
@ -1397,12 +1416,14 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
int imagetopgx(opj_image_t * image, const char *outfile) {
|
int imagetopgx(opj_image_t * image, const char *outfile)
|
||||||
|
{
|
||||||
int w, h;
|
int w, h;
|
||||||
int i, j, compno;
|
int i, j, compno, fails;
|
||||||
FILE *fdest = NULL;
|
FILE *fdest = NULL;
|
||||||
|
|
||||||
for (compno = 0; compno < image->numcomps; compno++) {
|
for (compno = 0; compno < image->numcomps; compno++)
|
||||||
|
{
|
||||||
opj_image_comp_t *comp = &image->comps[compno];
|
opj_image_comp_t *comp = &image->comps[compno];
|
||||||
char bname[256]; /* buffer for name */
|
char bname[256]; /* buffer for name */
|
||||||
char *name = bname; /* pointer */
|
char *name = bname; /* pointer */
|
||||||
|
@ -1411,12 +1432,15 @@ int imagetopgx(opj_image_t * image, const char *outfile) {
|
||||||
const size_t olen = strlen(outfile);
|
const size_t olen = strlen(outfile);
|
||||||
const size_t dotpos = olen - 4;
|
const size_t dotpos = olen - 4;
|
||||||
const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
|
const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
|
||||||
if( outfile[dotpos] != '.' ) {
|
|
||||||
|
if( outfile[dotpos] != '.' )
|
||||||
|
{
|
||||||
/* `pgx` was recognized but there is no dot at expected position */
|
/* `pgx` was recognized but there is no dot at expected position */
|
||||||
fprintf(stderr, "ERROR -> Impossible happen." );
|
fprintf(stderr, "ERROR -> Impossible happen." );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if( total > 256 ) {
|
if( total > 256 )
|
||||||
|
{
|
||||||
name = (char*)malloc(total+1);
|
name = (char*)malloc(total+1);
|
||||||
}
|
}
|
||||||
strncpy(name, outfile, dotpos);
|
strncpy(name, outfile, dotpos);
|
||||||
|
@ -1426,41 +1450,56 @@ int imagetopgx(opj_image_t * image, const char *outfile) {
|
||||||
strcpy(name+dotpos, ".pgx");
|
strcpy(name+dotpos, ".pgx");
|
||||||
}*/
|
}*/
|
||||||
fdest = fopen(name, "wb");
|
fdest = fopen(name, "wb");
|
||||||
if (!fdest) {
|
if (!fdest)
|
||||||
|
{
|
||||||
fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
|
fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* dont need name anymore */
|
/* dont need name anymore */
|
||||||
if( total > 256 ) {
|
if( total > 256 )
|
||||||
free(name);
|
free(name);
|
||||||
}
|
|
||||||
|
|
||||||
|
fails = 1;
|
||||||
w = image->comps[compno].w;
|
w = image->comps[compno].w;
|
||||||
h = image->comps[compno].h;
|
h = image->comps[compno].h;
|
||||||
|
|
||||||
fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h);
|
fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+',
|
||||||
if (comp->prec <= 8) {
|
comp->prec, w, h);
|
||||||
nbytes = 1;
|
|
||||||
} else if (comp->prec <= 16) {
|
|
||||||
nbytes = 2;
|
|
||||||
} else {
|
|
||||||
nbytes = 4;
|
|
||||||
}
|
|
||||||
for (i = 0; i < w * h; i++) {
|
|
||||||
int v = image->comps[compno].data[i];
|
|
||||||
for (j = nbytes - 1; j >= 0; j--) {
|
|
||||||
char byte = (char) (v >> (j * 8));
|
|
||||||
res = fwrite(&byte, 1, 1, fdest);
|
|
||||||
if( res < 1 ) {
|
|
||||||
fprintf(stderr, "failed to write 1 byte for %s\n", name);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(fdest);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
if (comp->prec <= 8)
|
||||||
|
nbytes = 1;
|
||||||
|
else
|
||||||
|
if (comp->prec <= 16)
|
||||||
|
nbytes = 2;
|
||||||
|
else
|
||||||
|
nbytes = 4;
|
||||||
|
|
||||||
|
for (i = 0; i < w * h; i++)
|
||||||
|
{
|
||||||
|
int v, val = image->comps[compno].data[i];
|
||||||
|
unsigned char byte;
|
||||||
|
|
||||||
|
for (j = nbytes - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
v = (int)(val >> (j * 8));
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
byte = (unsigned char)v;
|
||||||
|
res = fwrite(&byte, 1, 1, fdest);
|
||||||
|
|
||||||
|
if( res < 1 )
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to write 1 byte for %s\n", name);
|
||||||
|
goto fin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fdest); fdest = NULL;
|
||||||
|
}
|
||||||
|
fails = 0;
|
||||||
|
fin:
|
||||||
|
if(fdest) fclose(fdest);
|
||||||
|
|
||||||
|
return fails;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -->> -->> -->> -->>
|
/* -->> -->> -->> -->>
|
||||||
|
@ -1893,7 +1932,9 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
FILE *fdest = NULL;
|
FILE *fdest = NULL;
|
||||||
const char *tmp = outfile;
|
const char *tmp = outfile;
|
||||||
char *destname;
|
char *destname;
|
||||||
|
|
||||||
alpha = NULL;
|
alpha = NULL;
|
||||||
|
|
||||||
if((prec = image->comps[0].prec) > 16)
|
if((prec = image->comps[0].prec) > 16)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s:%d:imagetopnm\n\tprecision %d is larger than 16"
|
fprintf(stderr,"%s:%d:imagetopnm\n\tprecision %d is larger than 16"
|
||||||
|
@ -1971,16 +2012,22 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
if(two)
|
if(two)
|
||||||
{
|
{
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
|
|
||||||
if(triple)
|
if(triple)
|
||||||
{
|
{
|
||||||
v = *green + adjustG; ++green;
|
v = *green + adjustG; ++green;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
|
|
||||||
v = *blue + adjustB; ++blue;
|
v = *blue + adjustB; ++blue;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
|
|
||||||
|
@ -1989,6 +2036,8 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha + adjustA; ++alpha;
|
v = *alpha + adjustA; ++alpha;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
}
|
}
|
||||||
|
@ -1997,14 +2046,28 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
} /* if(two) */
|
} /* if(two) */
|
||||||
|
|
||||||
/* prec <= 8: */
|
/* prec <= 8: */
|
||||||
|
v = *red++;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
fprintf(fdest, "%c", (unsigned char)*red++);
|
fprintf(fdest, "%c", (unsigned char)v);
|
||||||
if(triple)
|
if(triple)
|
||||||
fprintf(fdest, "%c%c",(unsigned char)*green++, (unsigned char)*blue++);
|
{
|
||||||
|
v = *green++;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
|
fprintf(fdest, "%c", (unsigned char)v);
|
||||||
|
v = *blue++;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
|
fprintf(fdest, "%c", (unsigned char)v);
|
||||||
|
}
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
fprintf(fdest, "%c", (unsigned char)*alpha++);
|
{
|
||||||
|
v = *alpha++;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
|
fprintf(fdest, "%c", (unsigned char)v);
|
||||||
|
}
|
||||||
} /* for(i */
|
} /* for(i */
|
||||||
|
|
||||||
fclose(fdest); return 0;
|
fclose(fdest); return 0;
|
||||||
|
@ -2049,12 +2112,16 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
for (i = 0; i < wr * hr; i++)
|
for (i = 0; i < wr * hr; i++)
|
||||||
{
|
{
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
|
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha++;
|
v = *alpha++;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
/* netpbm: */
|
/* netpbm: */
|
||||||
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
|
||||||
}
|
}
|
||||||
|
@ -2064,7 +2131,10 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
{
|
{
|
||||||
for(i = 0; i < wr * hr; ++i)
|
for(i = 0; i < wr * hr; ++i)
|
||||||
{
|
{
|
||||||
fprintf(fdest, "%c", (unsigned char)(*red + adjustR)); ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
|
fprintf(fdest, "%c", (unsigned char)v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(fdest);
|
fclose(fdest);
|
||||||
|
@ -2174,10 +2244,17 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
b += adjust;
|
b += adjust;
|
||||||
if(has_alpha) a += adjust;
|
if(has_alpha) a += adjust;
|
||||||
}
|
}
|
||||||
|
if(r > 255) r = 255; else if(r < 0) r = 0;
|
||||||
dat8[i+0] = r ;
|
dat8[i+0] = r ;
|
||||||
|
if(g > 255) g = 255; else if(g < 0) g = 0;
|
||||||
dat8[i+1] = g ;
|
dat8[i+1] = g ;
|
||||||
|
if(b > 255) b = 255; else if(b < 0) b = 0;
|
||||||
dat8[i+2] = b ;
|
dat8[i+2] = b ;
|
||||||
if(has_alpha) dat8[i+3] = a;
|
if(has_alpha)
|
||||||
|
{
|
||||||
|
if(a > 255) a = 255; else if(a < 0) a = 0;
|
||||||
|
dat8[i+3] = a;
|
||||||
|
}
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
last_i = i + step;
|
last_i = i + step;
|
||||||
|
@ -2206,11 +2283,17 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
b += adjust;
|
b += adjust;
|
||||||
if(has_alpha) a += adjust;
|
if(has_alpha) a += adjust;
|
||||||
}
|
}
|
||||||
|
if(r > 255) r = 255; else if(r < 0) r = 0;
|
||||||
|
if(g > 255) g = 255; else if(g < 0) g = 0;
|
||||||
|
if(b > 255) b = 255; else if(b < 0) b = 0;
|
||||||
|
|
||||||
dat8[i+0] = r ;
|
dat8[i+0] = r ;
|
||||||
if(i+1 < ssize) dat8[i+1] = g ; else break;
|
if(i+1 < ssize) dat8[i+1] = g ; else break;
|
||||||
if(i+2 < ssize) dat8[i+2] = b ; else break;
|
if(i+2 < ssize) dat8[i+2] = b ; else break;
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
|
if(a > 255) a = 255; else if(a < 0) a = 0;
|
||||||
|
|
||||||
if(i+3 < ssize) dat8[i+3] = a ; else break;
|
if(i+3 < ssize) dat8[i+3] = a ; else break;
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
@ -2252,6 +2335,10 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
b = (b<<ushift) + (b>>dshift);
|
b = (b<<ushift) + (b>>dshift);
|
||||||
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
||||||
}
|
}
|
||||||
|
if(r > 65535) r = 65535; else if(r < 0) r = 0;
|
||||||
|
if(g > 65535) g = 65535; else if(g < 0) g = 0;
|
||||||
|
if(b > 65535) b = 65535; else if(b < 0) b = 0;
|
||||||
|
|
||||||
dat8[i+0] = r;/*LSB*/
|
dat8[i+0] = r;/*LSB*/
|
||||||
dat8[i+1] = (r >> 8);/*MSB*/
|
dat8[i+1] = (r >> 8);/*MSB*/
|
||||||
dat8[i+2] = g;
|
dat8[i+2] = g;
|
||||||
|
@ -2260,6 +2347,7 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
dat8[i+5] = (b >> 8);
|
dat8[i+5] = (b >> 8);
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
|
if(a > 65535) a = 65535; else if(a < 0) a = 0;
|
||||||
dat8[i+6] = a;
|
dat8[i+6] = a;
|
||||||
dat8[i+7] = (a >> 8);
|
dat8[i+7] = (a >> 8);
|
||||||
}
|
}
|
||||||
|
@ -2297,6 +2385,10 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
b = (b<<ushift) + (b>>dshift);
|
b = (b<<ushift) + (b>>dshift);
|
||||||
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
||||||
}
|
}
|
||||||
|
if(r > 65535) r = 65535; else if(r < 0) r = 0;
|
||||||
|
if(g > 65535) g = 65535; else if(g < 0) g = 0;
|
||||||
|
if(b > 65535) b = 65535; else if(b < 0) b = 0;
|
||||||
|
|
||||||
dat8[i+0] = r;/*LSB*/
|
dat8[i+0] = r;/*LSB*/
|
||||||
if(i+1 < ssize) dat8[i+1] = (r >> 8);else break;/*MSB*/
|
if(i+1 < ssize) dat8[i+1] = (r >> 8);else break;/*MSB*/
|
||||||
if(i+2 < ssize) dat8[i+2] = g; else break;
|
if(i+2 < ssize) dat8[i+2] = g; else break;
|
||||||
|
@ -2306,6 +2398,7 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
|
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
|
if(a > 65535) a = 65535; else if(a < 0) a = 0;
|
||||||
if(i+6 < ssize) dat8[i+6] = a; else break;
|
if(i+6 < ssize) dat8[i+6] = a; else break;
|
||||||
if(i+7 < ssize) dat8[i+7] = (a >> 8); else break;
|
if(i+7 < ssize) dat8[i+7] = (a >> 8); else break;
|
||||||
}
|
}
|
||||||
|
@ -2379,8 +2472,14 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
r += adjust;
|
r += adjust;
|
||||||
if(has_alpha) a += adjust;
|
if(has_alpha) a += adjust;
|
||||||
}
|
}
|
||||||
|
if(r > 255) r = 255; else if(r < 0) r = 0;
|
||||||
dat8[i+0] = r;
|
dat8[i+0] = r;
|
||||||
if(has_alpha) dat8[i+1] = a;
|
|
||||||
|
if(has_alpha)
|
||||||
|
{
|
||||||
|
if(a > 255) a = 255; else if(a < 0) a = 0;
|
||||||
|
dat8[i+1] = a;
|
||||||
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2411,10 +2510,12 @@ int imagetotif(opj_image_t * image, const char *outfile)
|
||||||
r = (r<<ushift) + (r>>dshift);
|
r = (r<<ushift) + (r>>dshift);
|
||||||
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
if(has_alpha) a = (a<<ushift) + (a>>dshift);
|
||||||
}
|
}
|
||||||
|
if(r > 65535) r = 65535; else if(r < 0) r = 0;
|
||||||
dat8[i+0] = r;/*LSB*/
|
dat8[i+0] = r;/*LSB*/
|
||||||
dat8[i+1] = r >> 8;/*MSB*/
|
dat8[i+1] = r >> 8;/*MSB*/
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
|
if(a > 65535) a = 65535; else if(a < 0) a = 0;
|
||||||
dat8[i+2] = a;
|
dat8[i+2] = a;
|
||||||
dat8[i+3] = a >> 8;
|
dat8[i+3] = a >> 8;
|
||||||
}
|
}
|
||||||
|
@ -2490,7 +2591,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
|
||||||
if( !tiBps || !tiPhoto)
|
if( !tiBps || !tiPhoto)
|
||||||
{
|
{
|
||||||
if( !tiBps)
|
if( !tiBps)
|
||||||
fprintf(stderr,"imagetotif: Bits=%d, Only 8 and 16 bits"
|
fprintf(stderr,"tiftoimage: Bits=%d, Only 8 and 16 bits"
|
||||||
" implemented\n",tiBps);
|
" implemented\n",tiBps);
|
||||||
else
|
else
|
||||||
if( !tiPhoto)
|
if( !tiPhoto)
|
||||||
|
@ -3427,6 +3528,10 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
{
|
{
|
||||||
png_set_packing(png);
|
png_set_packing(png);
|
||||||
}
|
}
|
||||||
|
printf("%s:%d:sgnd(%d,%d,%d) w(%d) h(%d) alpha(%d)\n",__FILE__,__LINE__,
|
||||||
|
image->comps[0].sgnd,
|
||||||
|
image->comps[1].sgnd,image->comps[2].sgnd,width,height,has_alpha);
|
||||||
|
|
||||||
adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
|
adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
|
||||||
adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
|
adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
|
||||||
adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
|
adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
|
||||||
|
@ -3442,18 +3547,21 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
if(is16)
|
if(is16)
|
||||||
{
|
{
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
*d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
|
*d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
|
||||||
|
|
||||||
v = *green + adjustG; ++green;
|
v = *green + adjustG; ++green;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
*d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
|
*d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
|
||||||
|
|
||||||
v = *blue + adjustB; ++blue;
|
v = *blue + adjustB; ++blue;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3462,6 +3570,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha + adjustA; ++alpha;
|
v = *alpha + adjustA; ++alpha;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3471,18 +3580,21 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
}/* if(is16) */
|
}/* if(is16) */
|
||||||
|
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
*d++ = (unsigned char)(v & mask);
|
*d++ = (unsigned char)(v & mask);
|
||||||
|
|
||||||
v = *green + adjustG; ++green;
|
v = *green + adjustG; ++green;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
*d++ = (unsigned char)(v & mask);
|
*d++ = (unsigned char)(v & mask);
|
||||||
|
|
||||||
v = *blue + adjustB; ++blue;
|
v = *blue + adjustB; ++blue;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3491,6 +3603,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha + adjustA; ++alpha;
|
v = *alpha + adjustA; ++alpha;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3561,6 +3674,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
for(x = 0; x < width; ++x)
|
for(x = 0; x < width; ++x)
|
||||||
{
|
{
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3569,6 +3683,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha++;
|
v = *alpha++;
|
||||||
|
if(v > 65535) v = 65535; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
if(force16) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3591,6 +3706,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
for(x = 0; x < width; ++x)
|
for(x = 0; x < width; ++x)
|
||||||
{
|
{
|
||||||
v = *red + adjustR; ++red;
|
v = *red + adjustR; ++red;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
@ -3599,6 +3715,7 @@ int imagetopng(opj_image_t * image, const char *write_idf)
|
||||||
if(has_alpha)
|
if(has_alpha)
|
||||||
{
|
{
|
||||||
v = *alpha + adjustA; ++alpha;
|
v = *alpha + adjustA; ++alpha;
|
||||||
|
if(v > 255) v = 255; else if(v < 0) v = 0;
|
||||||
|
|
||||||
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
if(force8) { v = (v<<ushift) + (v>>dshift); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue