#include "MagickCore/color-private.h"
#include "MagickCore/colormap.h"
#include "MagickCore/colorspace-private.h"
+#include "MagickCore/distort.h"
#include "MagickCore/exception.h"
#include "MagickCore/exception-private.h"
#include "MagickCore/image.h"
#include "MagickCore/option.h"
#include "MagickCore/pixel.h"
#include "MagickCore/resource_.h"
-#include "MagickCore/shear.h"
#include "MagickCore/static.h"
#include "MagickCore/string_.h"
#include "MagickCore/module.h"
FILE *mat_file;
size_t magick_size;
size_t extent;
+int file;
int status;
return NULL;
}
- mat_file = fdopen(AcquireUniqueFileResource(clone_info->filename),"w");
+ mat_file=0;
+ file = AcquireUniqueFileResource(clone_info->filename);
+ if (file != -1)
+ mat_file = fdopen(file,"w");
if(!mat_file)
{
RelinquishMagickMemory(CacheBlock);
ssize_t ldblk;
unsigned char *BImgBuff = NULL;
double MinVal, MaxVal;
- size_t Unknown6;
- unsigned z;
+ unsigned z, z2;
+ unsigned Frames;
int logging;
int sample_size;
MagickOffsetType filepos=0x80;
filepos = TellBlob(image);
while(!EOFBlob(image)) /* object parser loop */
{
+ Frames = 1;
(void) SeekBlob(image,filepos,SEEK_SET);
/* printf("pos=%X\n",TellBlob(image)); */
switch(MATLAB_HDR.DimFlag)
{
- case 8: z=1; break; /* 2D matrix*/
- case 12: z = ReadBlobXXXLong(image2); /* 3D matrix RGB*/
- Unknown6 = ReadBlobXXXLong(image2);
- (void) Unknown6;
+ case 8: z2=z=1; break; /* 2D matrix*/
+ case 12: z2=z = ReadBlobXXXLong(image2); /* 3D matrix RGB*/
+ (void) ReadBlobXXXLong(image2);
if(z!=3) ThrowReaderException(CoderError, "MultidimensionalMatricesAreNotSupported");
break;
+ case 16: z2=z = ReadBlobXXXLong(image2); /* 4D matrix animation */
+ if(z!=3 && z!=1)
+ ThrowReaderException(CoderError, "MultidimensionalMatricesAreNotSupported");
+ Frames = ReadBlobXXXLong(image2);
+ break;
default: ThrowReaderException(CoderError, "MultidimensionalMatricesAreNotSupported");
}
(void) ReadBlob(image2, 4, (unsigned char *) &size); /* data size */
- /* Image is gray when no complex flag is set and 2D Matrix */
- if ((MATLAB_HDR.DimFlag == 8) &&
- ((MATLAB_HDR.StructureFlag & FLAG_COMPLEX) == 0))
- image->type=GrayscaleType;
-
+ NEXT_FRAME:
switch (CellType)
{
case miINT8:
sample_size = 64;
image->depth = 64; /* double type cell */
(void) SetImageOption(clone_info,"quantum:format","floating-point");
+DisableMSCWarning(4127)
if (sizeof(double) != 8)
+RestoreMSCWarning
ThrowReaderException(CoderError, "IncompatibleSizeOfDouble");
if (MATLAB_HDR.StructureFlag & FLAG_COMPLEX)
{ /* complex double type cell */
image->colors = one << image->depth;
if (image->columns == 0 || image->rows == 0)
goto MATLAB_KO;
-
- /* ----- Create gray palette ----- */
-
- if (CellType==miUINT8 && z!=3)
- {
- if(image->colors>256) image->colors = 256;
-
- if (AcquireImageColormap(image, image->colors,exception) == MagickFalse)
+ /* Image is gray when no complex flag is set and 2D Matrix */
+ if ((MATLAB_HDR.DimFlag == 8) &&
+ ((MATLAB_HDR.StructureFlag & FLAG_COMPLEX) == 0))
{
- NoMemory:ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");}
- }
+ image->type=GrayscaleType;
+ SetImageColorspace(image,GRAYColorspace,exception);
+ }
+
/*
If ping is true, then only set image size and colors without
}
/* ----- Load raster data ----- */
- BImgBuff = (unsigned char *) AcquireQuantumMemory((size_t) (ldblk),sizeof(unsigned char *)); /* Ldblk was set in the check phase */
+ BImgBuff = (unsigned char *) AcquireQuantumMemory((size_t) (ldblk),sizeof(unsigned char)); /* Ldblk was set in the check phase */
if (BImgBuff == NULL)
- goto NoMemory;
+ ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
MinVal = 0;
MaxVal = 0;
{
for (i = 0; i < (ssize_t) MATLAB_HDR.SizeY; i++)
{
- q=QueueAuthenticPixels(image,0,MATLAB_HDR.SizeY-i-1,image->columns,1,exception);
- if (q == (Quantum *)NULL)
+ q=GetAuthenticPixels(image,0,MATLAB_HDR.SizeY-i-1,image->columns,1,exception);
+ if (q == (Quantum *) NULL)
{
if (logging) (void)LogMagickEvent(CoderEvent,GetMagickModule(),
" MAT set image pixels returns unexpected NULL on a row %u.", (unsigned)(MATLAB_HDR.SizeY-i-1));
/* row scan buffer is no longer needed */
RelinquishMagickMemory(BImgBuff);
BImgBuff = NULL;
+
+ if(--Frames>0)
+ {
+ z = z2;
+ if(image2==NULL) image2 = image;
+ goto NEXT_FRAME;
+ }
+ if ((image2!=NULL) && (image2!=image)) /* Does shadow temporary decompressed image exist? */
+ {
+/* CloseBlob(image2); */
+ DeleteImageFromList(&image2);
+ if(clone_info)
+ {
+ if(clone_info->file)
+ {
+ fclose(clone_info->file);
+ clone_info->file = NULL;
+ (void) remove_utf8(clone_info->filename);
+ }
+ }
+ }
}
- clone_info=DestroyImageInfo(clone_info);
+ clone_info=DestroyImageInfo(clone_info);
RelinquishMagickMemory(BImgBuff);
CloseBlob(image);
*/
p=image;
image=NULL;
- while (p != (Image *)NULL)
+ while (p != (Image *) NULL)
{
Image *tmp=p;
if ((p->rows == 0) || (p->columns == 0)) {
(void) memcpy(&local_time,localtime(¤t_time),sizeof(local_time));
#endif
(void) memset(MATLAB_HDR,' ',MagickMin(sizeof(MATLAB_HDR),124));
- FormatLocaleString(MATLAB_HDR,MaxTextExtent,"MATLAB 5.0 MAT-file, Platform: %s, Created on: %s %s %2d %2d:%2d:%2d %d",
+ FormatLocaleString(MATLAB_HDR,sizeof(MATLAB_HDR),
+ "MATLAB 5.0 MAT-file, Platform: %s, Created on: %s %s %2d %2d:%2d:%2d %d",
OsDesc,DayOfWTab[local_time.tm_wday],MonthsTab[local_time.tm_mon],
local_time.tm_mday,local_time.tm_hour,local_time.tm_min,
local_time.tm_sec,local_time.tm_year+1900);
scene=0;
do
{
- if (IsRGBColorspace(image->colorspace) == MagickFalse)
- (void) TransformImageColorspace(image,RGBColorspace,exception);
-
+ (void) TransformImageColorspace(image,sRGBColorspace,exception);
is_gray = IsImageGray(image,exception);
z = is_gray ? 0 : 3;