]> granicus.if.org Git - imagemagick/blobdiff - coders/jp2.c
(no commit message)
[imagemagick] / coders / jp2.c
index 27ae32748d01581ab54627e1178e13d4f3f29279..ba7d5a82ebc70cc2260904a974aaa21bf55ee7b2 100644 (file)
@@ -204,7 +204,7 @@ static OPJ_SIZE_T JP2ReadHandler(void *buffer,OPJ_SIZE_T length,void *context)
 
   image=(Image *) context;
   count=ReadBlob(image,(ssize_t) length,(unsigned char *) buffer);
-  if (count != (ssize_t) length)
+  if (count == 0)
     return((OPJ_SIZE_T) -1);
   return((OPJ_SIZE_T) count);
 }
@@ -533,94 +533,82 @@ static Image *ReadJP2Image(const ImageInfo *image_info,ExceptionInfo *exception)
 ModuleExport size_t RegisterJP2Image(void)
 {
   char
-    version[MaxTextExtent];
+    version[MagickPathExtent];
 
   MagickInfo
     *entry;
 
   *version='\0';
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
-  (void) FormatLocaleString(version,MaxTextExtent,"%s",opj_version());
+  (void) FormatLocaleString(version,MagickPathExtent,"%s",opj_version());
 #endif
-  entry=SetMagickInfo("JP2");
-  entry->description=ConstantString("JPEG-2000 File Format Syntax");
+  entry=AcquireMagickInfo("JP2","JP2","JPEG-2000 File Format Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJP2;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
 #endif
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("J2C");
-  entry->description=ConstantString("JPEG-2000 Code Stream Syntax");
+  entry=AcquireMagickInfo("JP2","J2C","JPEG-2000 Code Stream Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJ2K;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
 #endif
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("J2K");
-  entry->description=ConstantString("JPEG-2000 Code Stream Syntax");
+  entry=AcquireMagickInfo("JP2","J2K","JPEG-2000 Code Stream Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJ2K;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
 #endif
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("JPM");
-  entry->description=ConstantString("JPEG-2000 File Format Syntax");
+  entry=AcquireMagickInfo("JP2","JPM","JPEG-2000 File Format Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJP2;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
 #endif
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("JPT");
-  entry->description=ConstantString("JPEG-2000 File Format Syntax");
+  entry=AcquireMagickInfo("JP2","JPT","JPEG-2000 File Format Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJP2;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
 #endif
   (void) RegisterMagickInfo(entry);
-  entry=SetMagickInfo("JPC");
-  entry->description=ConstantString("JPEG-2000 Code Stream Syntax");
+  entry=AcquireMagickInfo("JP2","JPC","JPEG-2000 Code Stream Syntax");
   if (*version != '\0')
     entry->version=ConstantString(version);
   entry->mime_type=ConstantString("image/jp2");
-  entry->module=ConstantString("JP2");
   entry->magick=(IsImageFormatHandler *) IsJP2;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
   entry->decoder=(DecodeImageHandler *) ReadJP2Image;
   entry->encoder=(EncodeImageHandler *) WriteJP2Image;
@@ -967,6 +955,11 @@ static MagickBooleanType WriteJP2Image(const ImageInfo *image_info,Image *image,
       ((image->columns == 2048) || (image->rows == 1080) ||
        (image->columns == 4096) || (image->rows == 2160)))
     CinemaProfileCompliance(jp2_image,&parameters);
+  if (channels == 4)
+    jp2_image->comps[3].alpha=1;
+  else
+   if ((channels == 2) && (jp2_colorspace == OPJ_CLRSPC_GRAY))
+     jp2_image->comps[1].alpha=1;
   /*
     Convert to JP2 pixels.
   */