% June 2001 %
% %
% %
-% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2018 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
% obtain a copy of the License at %
% %
-% http://www.imagemagick.org/script/license.php %
+% https://www.imagemagick.org/script/license.php %
% %
% Unless required by applicable law or agreed to in writing, software %
% distributed under the License is distributed on an "AS IS" BASIS, %
opj_stream_destroy(jp2_stream);
for (i=0; i < (ssize_t) jp2_image->numcomps; i++)
{
- if ((jp2_image->comps[i].dx == 0) || (jp2_image->comps[i].dy == 0))
+ if ((jp2_image->comps[0].dx == 0) || (jp2_image->comps[0].dy == 0) ||
+ (jp2_image->comps[0].dx != jp2_image->comps[i].dx) ||
+ (jp2_image->comps[0].dy != jp2_image->comps[i].dy) ||
+ (jp2_image->comps[0].prec != jp2_image->comps[i].prec) ||
+ (jp2_image->comps[0].sgnd != jp2_image->comps[i].sgnd) ||
+ ((image->ping == MagickFalse) && (jp2_image->comps[i].data == NULL)))
{
opj_destroy_codec(jp2_codec);
opj_image_destroy(jp2_image);
if (status == MagickFalse)
return(DestroyImageList(image));
image->compression=JPEG2000Compression;
- if (jp2_image->numcomps <= 2)
- {
- SetImageColorspace(image,GRAYColorspace,exception);
- if (jp2_image->numcomps > 1)
- image->alpha_trait=BlendPixelTrait;
- }
+ if (jp2_image->numcomps == 1)
+ SetImageColorspace(image,GRAYColorspace,exception);
+ else
+ if (jp2_image->color_space == 2)
+ {
+ SetImageColorspace(image,GRAYColorspace,exception);
+ if (jp2_image->numcomps > 1)
+ image->alpha_trait=BlendPixelTrait;
+ }
+ else
+ if (jp2_image->color_space == 3)
+ SetImageColorspace(image,Rec601YCbCrColorspace,exception);
if (jp2_image->numcomps > 3)
image->alpha_trait=BlendPixelTrait;
- for (i=0; i < (ssize_t) jp2_image->numcomps; i++)
- if ((jp2_image->comps[i].dx > 1) || (jp2_image->comps[i].dy > 1))
- SetImageColorspace(image,YUVColorspace,exception);
if (jp2_image->icc_profile_buf != (unsigned char *) NULL)
{
StringInfo
{
case 0:
{
+ if (jp2_image->numcomps == 1)
+ {
+ SetPixelGray(image,ClampToQuantum(pixel),q);
+ SetPixelAlpha(image,OpaqueAlpha,q);
+ break;
+ }
SetPixelRed(image,ClampToQuantum(pixel),q);
SetPixelGreen(image,ClampToQuantum(pixel),q);
SetPixelBlue(image,ClampToQuantum(pixel),q);
opj_destroy_codec(jp2_codec);
opj_image_destroy(jp2_image);
opj_destroy_cstr_index(&codestream_index);
+ (void) CloseBlob(image);
return(GetFirstImageInList(image));
}
#endif
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJP2;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJ2K;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJ2K;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJP2;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJP2;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
entry->mime_type=ConstantString("image/jp2");
entry->magick=(IsImageFormatHandler *) IsJP2;
entry->flags^=CoderAdjoinFlag;
- entry->flags|=CoderSeekableStreamFlag;
+ entry->flags|=CoderDecoderSeekableStreamFlag;
+ entry->flags|=CoderEncoderSeekableStreamFlag;
#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadJP2Image;
entry->encoder=(EncodeImageHandler *) WriteJP2Image;
¶meters.subsampling_dx,¶meters.subsampling_dy);
property=GetImageProperty(image,"comment",exception);
if (property != (const char *) NULL)
- parameters.cp_comment=ConstantString(property);
+ parameters.cp_comment=(char *) property;
channels=3;
jp2_colorspace=OPJ_CLRSPC_SRGB;
if (image->colorspace == YUVColorspace)
{
if (jp2_colorspace == OPJ_CLRSPC_GRAY)
{
- *q=(int) (scale*GetPixelLuma(image,p));
+ *q=(int) (scale*GetPixelGray(image,p));
break;
}
*q=(int) (scale*GetPixelRed(image,p));