y;
MagickBooleanType
+ associated_alpha,
debug,
status;
default:
break;
}
+ associated_alpha=MagickFalse;
extra_samples=0;
(void) TIFFGetFieldDefaulted(tiff,TIFFTAG_EXTRASAMPLES,&extra_samples,
&sample_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))
{
MagickInfo
*entry;
-
+
if (tiff_semaphore == (SemaphoreInfo *) NULL)
tiff_semaphore=AllocateSemaphoreInfo();
LockSemaphoreInfo(tiff_semaphore);
%
% 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:
%
}
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