% October 2002 %
% %
% %
-% Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2011 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 %
CacheView
*image_view;
- ssize_t
- y;
-
MagickBooleanType
status;
register const PixelPacket
*p;
+ ssize_t
+ y;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
SetMagickPixelPacket(image,p,GetCacheViewAuthenticIndexQueue(image_view),
&target[1]);
GetMagickPixelPacket(image,&target[2]);
- p=GetCacheViewVirtualPixels(image_view,0,(ssize_t) image->rows-1,1,1,exception);
+ p=GetCacheViewVirtualPixels(image_view,0,(ssize_t) image->rows-1,1,1,
+ exception);
SetMagickPixelPacket(image,p,GetCacheViewAuthenticIndexQueue(image_view),
&target[2]);
status=MagickTrue;
% o exception: return any errors or warnings in this structure.
%
*/
-
-static inline QuantumAny GetPixelDepth(const Quantum pixel,
- const QuantumAny scale)
-{
-#if !defined(MAGICKCORE_HDRI_SUPPORT)
- return((QuantumAny) (scale*(pixel/scale)));
-#else
- return((QuantumAny) (scale*(pixel/scale)+0.5));
-#endif
-}
-
MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
{
- return(GetImageChannelDepth(image,AllChannels,exception));
+ return(GetImageChannelDepth(image,CompositeChannels,exception));
}
MagickExport size_t GetImageChannelDepth(const Image *image,
CacheView
*image_view;
- ssize_t
- y;
-
MagickBooleanType
status;
depth,
number_threads;
+ ssize_t
+ y;
+
/*
Compute image depth.
*/
#endif
for (i=0; i < (ssize_t) image->colors; i++)
{
+ const int
+ id = GetOpenMPThreadId();
+
if (status == MagickFalse)
continue;
- id=GetOpenMPThreadId();
while (current_depth[id] < MAGICKCORE_QUANTUM_DEPTH)
{
MagickStatusType
status;
QuantumAny
- scale;
+ range;
status=0;
- scale=QuantumRange/((QuantumAny) QuantumRange >>
- (MAGICKCORE_QUANTUM_DEPTH-current_depth[id]));
+ range=GetQuantumRange(current_depth[id]);
if ((channel & RedChannel) != 0)
- status|=(QuantumAny) p->red != GetPixelDepth(p->red,scale);
+ status|=GetRedPixelComponent(p) != ScaleAnyToQuantum(ScaleQuantumToAny(GetRedPixelComponent(p),
+ range),range);
if ((channel & GreenChannel) != 0)
- status|=(QuantumAny) p->green != GetPixelDepth(p->green,scale);
+ status|=GetGreenPixelComponent(p) != ScaleAnyToQuantum(ScaleQuantumToAny(GetGreenPixelComponent(p),
+ range),range);
if ((channel & BlueChannel) != 0)
- status|=(QuantumAny) p->blue != GetPixelDepth(p->blue,scale);
+ status|=GetBluePixelComponent(p) != ScaleAnyToQuantum(ScaleQuantumToAny(GetBluePixelComponent(p),
+ range),range);
if (status == 0)
break;
current_depth[id]++;
#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
+ const int
+ id = GetOpenMPThreadId();
+
register const IndexPacket
*restrict indexes;
*restrict p;
register ssize_t
- id,
x;
if (status == MagickFalse)
continue;
- id=GetOpenMPThreadId();
p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception);
if (p == (const PixelPacket *) NULL)
continue;
status;
QuantumAny
- scale;
+ range;
status=0;
- scale=QuantumRange/((QuantumAny) QuantumRange >>
- (MAGICKCORE_QUANTUM_DEPTH-current_depth[id]));
+ range=GetQuantumRange(current_depth[id]);
if ((channel & RedChannel) != 0)
- status|=(QuantumAny) p->red != GetPixelDepth(p->red,scale);
+ status|=GetRedPixelComponent(p) != ScaleAnyToQuantum(
+ ScaleQuantumToAny(GetRedPixelComponent(p),range),range);
if ((channel & GreenChannel) != 0)
- status|=(QuantumAny) p->green != GetPixelDepth(p->green,scale);
+ status|=GetGreenPixelComponent(p) != ScaleAnyToQuantum(
+ ScaleQuantumToAny(GetGreenPixelComponent(p),range),range);
if ((channel & BlueChannel) != 0)
- status|=(QuantumAny) p->blue != GetPixelDepth(p->blue,scale);
+ status|=GetBluePixelComponent(p) != ScaleAnyToQuantum(
+ ScaleQuantumToAny(GetBluePixelComponent(p),range),range);
if (((channel & OpacityChannel) != 0) && (image->matte != MagickFalse))
- status|=(QuantumAny) p->opacity != GetPixelDepth(p->opacity,scale);
+ status|=GetOpacityPixelComponent(p) != ScaleAnyToQuantum(
+ ScaleQuantumToAny(GetOpacityPixelComponent(p),range),range);
if (((channel & IndexChannel) != 0) &&
(image->colorspace == CMYKColorspace))
- status|=(QuantumAny) indexes[x] != GetPixelDepth(indexes[x],scale);
+ status|=GetIndexPixelComponent(indexes+x) !=
+ ScaleAnyToQuantum(ScaleQuantumToAny(GetIndexPixelComponent(indexes+
+ x),range),range);
if (status == 0)
break;
current_depth[id]++;
ImageType
type;
- ssize_t
- y;
-
register const PixelPacket
*p;
register ssize_t
x;
+ ssize_t
+ y;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
ImageType
type;
- ssize_t
- y;
-
register ssize_t
x;
register const PixelPacket
*p;
+ ssize_t
+ y;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
CacheView
*image_view;
- ssize_t
- y;
-
register const PixelPacket
*p;
register ssize_t
x;
+ ssize_t
+ y;
+
/*
Determine if image is opaque.
*/
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- if (p->opacity != OpaqueOpacity)
+ if (GetOpacityPixelComponent(p) != OpaqueOpacity)
break;
p++;
}
% o depth: the image depth.
%
*/
-
-static inline Quantum SetPixelDepth(const Quantum pixel,
- const QuantumAny scale)
-{
- return((Quantum) (scale*(pixel/scale)));
-}
-
MagickExport MagickBooleanType SetImageDepth(Image *image,
const size_t depth)
{
- return(SetImageChannelDepth(image,AllChannels,depth));
+ return(SetImageChannelDepth(image,CompositeChannels,depth));
}
MagickExport MagickBooleanType SetImageChannelDepth(Image *image,
ExceptionInfo
*exception;
- ssize_t
- y;
-
MagickBooleanType
status;
QuantumAny
- scale;
+ range;
+
+ ssize_t
+ y;
assert(image != (Image *) NULL);
if (image->debug != MagickFalse)
Scale pixels to desired depth.
*/
status=MagickTrue;
- scale=QuantumRange/((QuantumAny) QuantumRange >> (MAGICKCORE_QUANTUM_DEPTH-
- depth));
+ range=GetQuantumRange(depth);
exception=(&image->exception);
image_view=AcquireCacheView(image);
#if defined(MAGICKCORE_OPENMP_SUPPORT)
for (x=0; x < (ssize_t) image->columns; x++)
{
if ((channel & RedChannel) != 0)
- q->red=SetPixelDepth(q->red,scale);
+ SetRedPixelComponent(q,ScaleAnyToQuantum(ScaleQuantumToAny(
+ GetRedPixelComponent(q),range),range));
if ((channel & GreenChannel) != 0)
- q->green=SetPixelDepth(q->green,scale);
+ SetGreenPixelComponent(q,ScaleAnyToQuantum(ScaleQuantumToAny(
+ GetGreenPixelComponent(q),range),range));
if ((channel & BlueChannel) != 0)
- q->green=SetPixelDepth(q->blue,scale);
+ SetBluePixelComponent(q,ScaleAnyToQuantum(ScaleQuantumToAny(
+ GetBluePixelComponent(q),range),range));
if (((channel & OpacityChannel) != 0) && (image->matte != MagickFalse))
- q->opacity=SetPixelDepth(q->opacity,scale);
+ SetOpacityPixelComponent(q,ScaleAnyToQuantum(ScaleQuantumToAny(
+ GetOpacityPixelComponent(q),range),range));
if (((channel & IndexChannel) != 0) &&
(image->colorspace == CMYKColorspace))
- indexes[x]=SetPixelDepth(indexes[x],scale);
+ SetIndexPixelComponent(indexes+x,ScaleAnyToQuantum(ScaleQuantumToAny(
+ GetIndexPixelComponent(indexes+x),range),range));
q++;
}
if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
image_view=DestroyCacheView(image_view);
if (image->storage_class == PseudoClass)
{
- QuantumAny
- range;
-
register ssize_t
i;
*restrict p;
p=image->colormap;
- range=GetQuantumRange(depth);
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp parallel for schedule(dynamic,4) shared(status)
#endif
for (i=0; i < (ssize_t) image->colors; i++)
{
if ((channel & RedChannel) != 0)
- p->red=SetPixelDepth(p->red,scale);
+ GetRedPixelComponent(p)=ScaleAnyToQuantum(ScaleQuantumToAny(GetRedPixelComponent(p),range),range);
if ((channel & GreenChannel) != 0)
- p->green=SetPixelDepth(p->green,scale);
+ GetGreenPixelComponent(p)=ScaleAnyToQuantum(ScaleQuantumToAny(GetGreenPixelComponent(p),range),range);
if ((channel & BlueChannel) != 0)
- p->blue=SetPixelDepth(p->blue,scale);
+ GetBluePixelComponent(p)=ScaleAnyToQuantum(ScaleQuantumToAny(GetBluePixelComponent(p),range),range);
if ((channel & OpacityChannel) != 0)
- p->opacity=SetPixelDepth(p->opacity,scale);
+ GetOpacityPixelComponent(p)=ScaleAnyToQuantum(ScaleQuantumToAny(GetOpacityPixelComponent(p),range),
+ range);
p++;
}
}