From 891dc79bb95cb3ea8f99f3bc90fe3dfbe362ace5 Mon Sep 17 00:00:00 2001 From: cristy Date: Thu, 4 Mar 2010 01:47:16 +0000 Subject: [PATCH] --- coders/dpx.c | 6 +-- coders/tiff.c | 23 +++++---- magick/blob.c | 2 +- magick/quantum-export.c | 102 ++++++++++++++++++++++++++++++++++++++-- 4 files changed, 114 insertions(+), 19 deletions(-) diff --git a/coders/dpx.c b/coders/dpx.c index b79b72244..5473066c4 100644 --- a/coders/dpx.c +++ b/coders/dpx.c @@ -1794,9 +1794,9 @@ static MagickBooleanType WriteDPXImage(const ImageInfo *image_info,Image *image) Convert pixel packets to DPX raster image. */ quantum_info=AcquireQuantumInfo(image_info,image); - quantum_info->quantum=32; - quantum_info->pack=dpx.image.image_element[0].packing == 0 ? MagickTrue : - MagickFalse; + SetQuantumQuantum(quantum_info,32); + SetQuantumPack(quantum_info,dpx.image.image_element[0].packing == 0 ? + MagickTrue : MagickFalse); quantum_type=RGBQuantum; if (image->matte != MagickFalse) quantum_type=RGBAQuantum; diff --git a/coders/tiff.c b/coders/tiff.c index 2bc6b60e6..807c127f5 100644 --- a/coders/tiff.c +++ b/coders/tiff.c @@ -748,6 +748,7 @@ static Image *ReadTIFFImage(const ImageInfo *image_info, y; MagickBooleanType + associated_alpha, debug, status; @@ -1054,6 +1055,7 @@ static Image *ReadTIFFImage(const ImageInfo *image_info, default: break; } + associated_alpha=MagickFalse; extra_samples=0; (void) TIFFGetFieldDefaulted(tiff,TIFFTAG_EXTRASAMPLES,&extra_samples, &sample_info); @@ -1066,19 +1068,16 @@ static Image *ReadTIFFImage(const ImageInfo *image_info, for (i=0; i < extra_samples; i++) { image->matte=MagickTrue; - (void) SetImageProperty(image,"tiff:alpha","undefined"); - SetQuantumAlphaType(quantum_info,UndefinedQuantumAlpha); - if (sample_info[i] == EXTRASAMPLE_UNASSALPHA) - { - SetQuantumAlphaType(quantum_info,DisassociatedQuantumAlpha); - (void) SetImageProperty(image,"tiff:alpha","unassociated"); - } if (sample_info[i] == EXTRASAMPLE_ASSOCALPHA) - { - SetQuantumAlphaType(quantum_info,AssociatedQuantumAlpha); - (void) SetImageProperty(image,"tiff:alpha","associated"); - } + SetQuantumAlphaType(quantum_info,DisassociatedQuantumAlpha); } + option=GetImageOption(image_info,"tiff:alpha"); + if (option != (const char *) NULL) + associated_alpha=LocaleCompare(option,"associated") == 0 ? MagickTrue : + MagickFalse; + if (image->matte != MagickFalse) + (void) SetImageProperty(image,"tiff:alpha", + associated_alpha != MagickFalse ? "associated" : "unassociated"); if ((photometric == PHOTOMETRIC_PALETTE) && (pow(2.0,1.0*bits_per_sample) <= MaxColormapSize)) { @@ -1648,7 +1647,7 @@ ModuleExport unsigned long RegisterTIFFImage(void) MagickInfo *entry; - + if (tiff_semaphore == (SemaphoreInfo *) NULL) tiff_semaphore=AllocateSemaphoreInfo(); LockSemaphoreInfo(tiff_semaphore); diff --git a/magick/blob.c b/magick/blob.c index 8c1f8d7cc..d78ef8a6d 100644 --- a/magick/blob.c +++ b/magick/blob.c @@ -1236,7 +1236,7 @@ MagickExport MagickSizeType GetBlobSize(const Image *image) break; case BlobStream: { - extent=(MagickSizeType) image->blob->extent; + extent=(MagickSizeType) image->blob->length; break; } } diff --git a/magick/quantum-export.c b/magick/quantum-export.c index 880348c62..b97a713ac 100644 --- a/magick/quantum-export.c +++ b/magick/quantum-export.c @@ -89,9 +89,10 @@ % % The format of the ExportQuantumPixels method is: % -% size_t ExportQuantumPixels(const Image *image,const CacheView *image_view, -% const QuantumInfo *quantum_info,const QuantumType quantum_type, -% unsigned char *pixels,ExceptionInfo *exception) +% size_t ExportQuantumPixels(const Image *image, +% const CacheView *image_view,const QuantumInfo *quantum_info, +% const QuantumType quantum_type,unsigned char *pixels, +% ExceptionInfo *exception) % % A description of each parameter follows: % @@ -2006,6 +2007,101 @@ MagickExport size_t ExportQuantumPixels(const Image *image, } break; } + case 10: + { + register unsigned long + pixel; + + range=GetQuantumRange(image->depth); + if (quantum_info->pack == MagickFalse) + { + long + n; + + register long + i; + + unsigned long + quantum; + + n=0; + quantum=0; + pixel=0; + for (x=0; x < (long) number_pixels; x++) + { + for (i=0; i < 4; i++) + { + switch (i) + { + case 0: quantum=p->red; break; + case 1: quantum=p->green; break; + case 2: quantum=p->blue; break; + case 3: quantum=QuantumRange-p->opacity; break; + } + switch (n % 3) + { + case 0: + { + pixel|=(unsigned long) (ScaleQuantumToAny(quantum, + range) << 22); + break; + } + case 1: + { + pixel|=(unsigned long) (ScaleQuantumToAny(quantum, + range) << 12); + break; + } + case 2: + { + pixel|=(unsigned long) (ScaleQuantumToAny(quantum, + range) << 2); + q=PopLongPixel(endian,pixel,q); + pixel=0; + break; + } + } + n++; + } + p++; + q+=quantum_info->pad; + } + break; + } + if (quantum_info->quantum == 32UL) + { + for (x=0; x < (long) number_pixels; x++) + { + pixel=(unsigned long) ScaleQuantumToAny(p->red,range); + q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(p->green,range); + q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(p->blue,range); + q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(QuantumRange-p->opacity, + range); + q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q); + p++; + q+=quantum_info->pad; + } + break; + } + for (x=0; x < (long) number_pixels; x++) + { + pixel=(unsigned long) ScaleQuantumToAny(p->red,range); + q=PopQuantumPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(p->green,range); + q=PopQuantumPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(p->blue,range); + q=PopQuantumPixel(&quantum_state,image->depth,pixel,q); + pixel=(unsigned long) ScaleQuantumToAny(QuantumRange- + p->opacity,range); + q=PopQuantumPixel(&quantum_state,image->depth,pixel,q); + p++; + q+=quantum_info->pad; + } + break; + } case 16: { register unsigned short -- 2.40.0