[trunk] Make sure to use 8bits buffer when applying the ICC profile.
Fixes issue 281
This commit is contained in:
parent
dd0d2c2f0a
commit
41add6882b
|
@ -325,9 +325,17 @@ void color_apply_icc_profile(opj_image_t *image)
|
||||||
oldspace = image->color_space;
|
oldspace = image->color_space;
|
||||||
|
|
||||||
if(out_space == cmsSigRgbData) /* enumCS 16 */
|
if(out_space == cmsSigRgbData) /* enumCS 16 */
|
||||||
|
{
|
||||||
|
if( prec <= 8 )
|
||||||
|
{
|
||||||
|
in_type = TYPE_RGB_8;
|
||||||
|
out_type = TYPE_RGB_8;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
in_type = TYPE_RGB_16;
|
in_type = TYPE_RGB_16;
|
||||||
out_type = TYPE_RGB_16;
|
out_type = TYPE_RGB_16;
|
||||||
|
}
|
||||||
out_prof = cmsCreate_sRGBProfile();
|
out_prof = cmsCreate_sRGBProfile();
|
||||||
image->color_space = OPJ_CLRSPC_SRGB;
|
image->color_space = OPJ_CLRSPC_SRGB;
|
||||||
}
|
}
|
||||||
|
@ -407,6 +415,41 @@ fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
|
||||||
}
|
}
|
||||||
|
|
||||||
if(image->numcomps > 2)/* RGB, RGBA */
|
if(image->numcomps > 2)/* RGB, RGBA */
|
||||||
|
{
|
||||||
|
if( prec <= 8 )
|
||||||
|
{
|
||||||
|
unsigned char *inbuf, *outbuf, *in, *out;
|
||||||
|
max = max_w * max_h;
|
||||||
|
nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned char);
|
||||||
|
in = inbuf = (unsigned char*)malloc(nr_samples);
|
||||||
|
out = outbuf = (unsigned char*)malloc(nr_samples);
|
||||||
|
|
||||||
|
r = image->comps[0].data;
|
||||||
|
g = image->comps[1].data;
|
||||||
|
b = image->comps[2].data;
|
||||||
|
|
||||||
|
for(i = 0; i < max; ++i)
|
||||||
|
{
|
||||||
|
*in++ = (unsigned char)*r++;
|
||||||
|
*in++ = (unsigned char)*g++;
|
||||||
|
*in++ = (unsigned char)*b++;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
|
||||||
|
|
||||||
|
r = image->comps[0].data;
|
||||||
|
g = image->comps[1].data;
|
||||||
|
b = image->comps[2].data;
|
||||||
|
|
||||||
|
for(i = 0; i < max; ++i)
|
||||||
|
{
|
||||||
|
*r++ = (int)*out++;
|
||||||
|
*g++ = (int)*out++;
|
||||||
|
*b++ = (int)*out++;
|
||||||
|
}
|
||||||
|
free(inbuf); free(outbuf);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
unsigned short *inbuf, *outbuf, *in, *out;
|
unsigned short *inbuf, *outbuf, *in, *out;
|
||||||
max = max_w * max_h;
|
max = max_w * max_h;
|
||||||
|
@ -438,6 +481,7 @@ fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
|
||||||
*b++ = (int)*out++;
|
*b++ = (int)*out++;
|
||||||
}
|
}
|
||||||
free(inbuf); free(outbuf);
|
free(inbuf); free(outbuf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else /* GRAY, GRAYA */
|
else /* GRAY, GRAYA */
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue