#include "magick/statistic.h"
#include "magick/stream.h"
#include "magick/string_.h"
+#include "magick/string-private.h"
#include "magick/thread-private.h"
#include "magick/utility.h"
\f
%
*/
-static inline unsigned long MagickMax(const unsigned long x,
- const unsigned long y)
+static inline size_t MagickMax(const size_t x,
+ const size_t y)
{
if (x > y)
return(x);
static MagickBooleanType AcquireQuantumPixels(QuantumInfo *quantum_info,
const size_t extent)
{
- register long
+ register ssize_t
i;
assert(quantum_info != (QuantumInfo *) NULL);
return(MagickFalse);
quantum_info->extent=extent;
(void) ResetMagickMemory(quantum_info->pixels,0,
- sizeof(*quantum_info->pixels));
- for (i=0; i < (long) quantum_info->number_threads; i++)
+ quantum_info->number_threads*sizeof(*quantum_info->pixels));
+ for (i=0; i < (ssize_t) quantum_info->number_threads; i++)
{
quantum_info->pixels[i]=(unsigned char *) AcquireQuantumMemory(extent+1,
sizeof(**quantum_info->pixels));
*/
static void DestroyQuantumPixels(QuantumInfo *quantum_info)
{
- register long
+ register ssize_t
i;
+ ssize_t
+ extent;
+
assert(quantum_info != (QuantumInfo *) NULL);
assert(quantum_info->signature == MagickSignature);
assert(quantum_info->pixels != (unsigned char **) NULL);
- for (i=0; i < (long) quantum_info->number_threads; i++)
- {
- assert(quantum_info->pixels[i][quantum_info->extent] == QuantumSignature);
- quantum_info->pixels[i]=(unsigned char *) RelinquishMagickMemory(
- quantum_info->pixels[i]);
- }
+ extent=(ssize_t) quantum_info->extent;
+ for (i=0; i < (ssize_t) quantum_info->number_threads; i++)
+ if (quantum_info->pixels[i] != (unsigned char *) NULL)
+ {
+ /*
+ Did we overrun our quantum buffer?
+ */
+ assert(quantum_info->pixels[i][extent] == QuantumSignature);
+ quantum_info->pixels[i]=(unsigned char *) RelinquishMagickMemory(
+ quantum_info->pixels[i]);
+ }
quantum_info->pixels=(unsigned char **) RelinquishMagickMemory(
quantum_info->pixels);
}
case GrayAlphaQuantum: packet_size=2; break;
case IndexAlphaQuantum: packet_size=2; break;
case RGBQuantum: packet_size=3; break;
+ case BGRQuantum: packet_size=3; break;
case RGBAQuantum: packet_size=4; break;
case RGBOQuantum: packet_size=4; break;
+ case BGRAQuantum: packet_size=4; break;
case CMYKQuantum: packet_size=4; break;
case CMYKAQuantum: packet_size=5; break;
default: break;
}
if (quantum_info->pack == MagickFalse)
- return((size_t) (packet_size*image->columns*((image->depth+7)/8)));
- return((size_t) ((packet_size*image->columns*image->depth+7)/8));
+ return((size_t) (packet_size*image->columns*((quantum_info->depth+7)/8)));
+ return((size_t) ((packet_size*image->columns*quantum_info->depth+7)/8));
}
\f
/*
return;
option=GetImageOption(image_info,"quantum:format");
if (option != (char *) NULL)
- quantum_info->format=(QuantumFormatType) ParseMagickOption(
+ quantum_info->format=(QuantumFormatType) ParseCommandOption(
MagickQuantumFormatOptions,MagickFalse,option);
option=GetImageOption(image_info,"quantum:minimum");
if (option != (char *) NULL)
- quantum_info->minimum=atof(option);
+ quantum_info->minimum=InterpretLocaleValue(option,(char **) NULL);
option=GetImageOption(image_info,"quantum:maximum");
if (option != (char *) NULL)
- quantum_info->maximum=atof(option);
+ quantum_info->maximum=InterpretLocaleValue(option,(char **) NULL);
if ((quantum_info->minimum == 0.0) && (quantum_info->maximum == 0.0))
quantum_info->scale=0.0;
else
quantum_info->minimum);
option=GetImageOption(image_info,"quantum:scale");
if (option != (char *) NULL)
- quantum_info->scale=atof(option);
+ quantum_info->scale=InterpretLocaleValue(option,(char **) NULL);
option=GetImageOption(image_info,"quantum:polarity");
if (option != (char *) NULL)
quantum_info->min_is_white=LocaleCompare(option,"min-is-white") == 0 ?
*/
MagickExport unsigned char *GetQuantumPixels(const QuantumInfo *quantum_info)
{
- long
- id;
+ const int
+ id = GetOpenMPThreadId();
assert(quantum_info != (QuantumInfo *) NULL);
assert(quantum_info->signature == MagickSignature);
- id=GetOpenMPThreadId();
return(quantum_info->pixels[id]);
}
\f
% The format of the SetQuantumDepth method is:
%
% MagickBooleanType SetQuantumDepth(const Image *image,
-% QuantumInfo *quantum_info,const unsigned long depth)
+% QuantumInfo *quantum_info,const size_t depth)
%
% A description of each parameter follows:
%
%
*/
MagickExport MagickBooleanType SetQuantumDepth(const Image *image,
- QuantumInfo *quantum_info,const unsigned long depth)
+ QuantumInfo *quantum_info,const size_t depth)
{
MagickBooleanType
status;
if (quantum_info->depth > 32)
quantum_info->depth=64;
else
- quantum_info->depth=32;
+ if (quantum_info->depth > 16)
+ quantum_info->depth=32;
+ else
+ quantum_info->depth=16;
}
if (quantum_info->pixels != (unsigned char **) NULL)
DestroyQuantumPixels(quantum_info);
- status=AcquireQuantumPixels(quantum_info,(quantum_info->pad+5)*image->columns*
- ((quantum_info->depth+7)/8));
+ status=AcquireQuantumPixels(quantum_info,(6+quantum_info->pad)*image->columns*
+ ((quantum_info->depth+7)/8)); /* allow for CMYKA + RLE byte + pad */
return(status);
}
\f
% The format of the SetQuantumPad method is:
%
% MagickBooleanType SetQuantumPad(const Image *image,
-% QuantumInfo *quantum_info,const unsigned long pad)
+% QuantumInfo *quantum_info,const size_t pad)
%
% A description of each parameter follows:
%
%
*/
MagickExport MagickBooleanType SetQuantumPad(const Image *image,
- QuantumInfo *quantum_info,const unsigned long pad)
+ QuantumInfo *quantum_info,const size_t pad)
{
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
% The format of the SetQuantumQuantum method is:
%
% void SetQuantumQuantum(QuantumInfo *quantum_info,
-% const unsigned long quantum)
+% const size_t quantum)
%
% A description of each parameter follows:
%
%
*/
MagickExport void SetQuantumQuantum(QuantumInfo *quantum_info,
- const unsigned long quantum)
+ const size_t quantum)
{
assert(quantum_info != (QuantumInfo *) NULL);
assert(quantum_info->signature == MagickSignature);