return(pixel[image->channel_map[LPixelChannel].offset]);
}
+static inline MagickRealType GetPixelLuma(const Image *restrict image,
+ const Quantum *restrict pixel)
+{
+ if (image->colorspace == GRAYColorspace)
+ return((MagickRealType) pixel[image->channel_map[GrayPixelChannel].offset]);
+ return(0.21267f*pixel[image->channel_map[RedPixelChannel].offset]+
+ 0.71516f*pixel[image->channel_map[GreenPixelChannel].offset]+
+ 0.07217f*pixel[image->channel_map[BluePixelChannel].offset]); /* Rec709 */
+}
+
static inline MagickRealType GetPixelLuminance(const Image *restrict image,
const Quantum *restrict pixel)
{
if (image->colorspace == GRAYColorspace)
return((MagickRealType) pixel[image->channel_map[GrayPixelChannel].offset]);
if (image->colorspace != sRGBColorspace)
- return(0.298839f*pixel[image->channel_map[RedPixelChannel].offset]+
- 0.586811f*pixel[image->channel_map[GreenPixelChannel].offset]+
- 0.114350f*pixel[image->channel_map[BluePixelChannel].offset]);
+ return(0.21267f*pixel[image->channel_map[RedPixelChannel].offset]+
+ 0.71516f*pixel[image->channel_map[GreenPixelChannel].offset]+
+ 0.07217f*pixel[image->channel_map[BluePixelChannel].offset]);
red=DecodePixelGamma((MagickRealType)
pixel[image->channel_map[RedPixelChannel].offset]);
green=DecodePixelGamma((MagickRealType)
pixel[image->channel_map[GreenPixelChannel].offset]);
blue=DecodePixelGamma((MagickRealType)
pixel[image->channel_map[BluePixelChannel].offset]);
- return(0.21267f*red+0.71516f*green+0.07217f*blue);
+ return(0.21267f*red+0.71516f*green+0.07217f*blue); /* Rec709 */
}
static inline Quantum GetPixelMagenta(const Image *restrict image,
for (x=0; x < ((ssize_t) image->columns-3); x+=4)
{
byte=(unsigned char)
- ((((size_t) (4*GetPixelIntensity(image,p+3)/QuantumRange) & 0x03) << 6) |
- (((size_t) (4*GetPixelIntensity(image,p+2)/QuantumRange) & 0x03) << 4) |
- (((size_t) (4*GetPixelIntensity(image,p+1)/QuantumRange) & 0x03) << 2) |
- (((size_t) (4*GetPixelIntensity(image,p+0)/QuantumRange) & 0x03) << 0));
+ ((((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+3))/QuantumRange) & 0x03) << 6) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+2))/QuantumRange) & 0x03) << 4) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+1))/QuantumRange) & 0x03) << 2) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+0))/QuantumRange) & 0x03) << 0));
(void) FormatLocaleString(buffer,MaxTextExtent,"%02x",byte);
(void) WriteBlobString(image,buffer);
p+=4;
{
i=(ssize_t) image->columns % 4;
byte=(unsigned char)
- ((((size_t) (4*GetPixelIntensity(image,p+MagickMin(i,3))/QuantumRange) & 0x03) << 6) |
- (((size_t) (4*GetPixelIntensity(image,p+MagickMin(i,2))/QuantumRange) & 0x03) << 4) |
- (((size_t) (4*GetPixelIntensity(image,p+MagickMin(i,1))/QuantumRange) & 0x03) << 2) |
- (((size_t) (4*GetPixelIntensity(image,p+MagickMin(i,0))/QuantumRange) & 0x03) << 0));
+ ((((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+MagickMin(i,3)))/QuantumRange) & 0x03) << 6) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+MagickMin(i,2)))/QuantumRange) & 0x03) << 4) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+MagickMin(i,1)))/QuantumRange) & 0x03) << 2) |
+ (((size_t) (4*ClampToQuantum(GetPixelLuma(image,p+MagickMin(i,0)))/QuantumRange) & 0x03) << 0));
(void) FormatLocaleString(buffer,MaxTextExtent,"%02x",~byte);
(void) WriteBlobString(image,buffer);
}
for (x=0; x < (ssize_t) image->columns; x++)
{
byte<<=1;
- if (GetPixelIntensity(image,p) < (QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x01;
bit++;
if (bit == 8)
{
if (number_components == 1)
jas_matrix_setv(pixels[0],x,(jas_seqent_t) ScaleQuantumToAny(
- GetPixelIntensity(image,p),range));
+ ClampToQuantum(GetPixelLuma(image,p)),range));
else
{
jas_matrix_setv(pixels[0],x,(jas_seqent_t) ScaleQuantumToAny(
}
case JCS_GRAYSCALE:
{
- image->intensity=Rec709LumaPixelIntensityMethod;
(void) SetImageColorspace(image,GRAYColorspace,exception);
break;
}
}
else
if (jpeg_info.in_color_space == JCS_GRAYSCALE)
+ for (y=0; y < (ssize_t) image->rows; y++)
{
- image->intensity=Rec709LumaPixelIntensityMethod;
- for (y=0; y < (ssize_t) image->rows; y++)
+ register const Quantum
+ *p;
+
+ register ssize_t
+ x;
+
+ p=GetVirtualPixels(image,0,y,image->columns,1,exception);
+ if (p == (const Quantum *) NULL)
+ break;
+ q=jpeg_pixels;
+ for (x=0; x < (ssize_t) image->columns; x++)
{
- register const Quantum
- *p;
-
- register ssize_t
- x;
-
- p=GetVirtualPixels(image,0,y,image->columns,1,exception);
- if (p == (const Quantum *) NULL)
- break;
- q=jpeg_pixels;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- *q++=(JSAMPLE) ScaleQuantumToChar(GetPixelIntensity(image,p));
- p+=GetPixelChannels(image);
- }
- (void) jpeg_write_scanlines(&jpeg_info,scanline,1);
- status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
- image->rows);
- if (status == MagickFalse)
- break;
+ *q++=(JSAMPLE) ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(
+ image,p)));
+ p+=GetPixelChannels(image);
+ }
+ (void) jpeg_write_scanlines(&jpeg_info,scanline,1);
+ status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+ image->rows);
+ if (status == MagickFalse)
+ break;
}
- }
else
for (y=0; y < (ssize_t) image->rows; y++)
{
q=jpeg_pixels;
for (x=0; x < (ssize_t) image->columns; x++)
{
- *q++=(JSAMPLE) (ScaleQuantumToShort(GetPixelIntensity(image,p)) >> 4);
+ *q++=(JSAMPLE) (ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(
+ image,p))) >> 4);
p+=GetPixelChannels(image);
}
(void) jpeg_write_scanlines(&jpeg_info,scanline,1);
byte>>=1;
if (image->endian == LSBEndian)
{
- if (GetPixelIntensity(image,p) < (QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x80;
}
else
- if (GetPixelIntensity(image,p) >= (QuantumRange/2.0))
+ if (GetPixelLuma(image,p) >= (QuantumRange/2.0))
byte|=0x80;
bit++;
if (bit == 8)
byte=0;
for (x=0; x < (ssize_t) image->columns; x++)
{
- if (GetPixelIntensity(image,p) < (QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x1 << (7-bit);
bit++;
if (bit == 8)
for (x=0; x < (ssize_t) image->columns; x++)
{
byte<<=1;
- if (GetPixelIntensity(image,p) < ((double) QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x01;
bit++;
if (bit == 8)
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
+ *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
p+=GetPixelChannels(image);
}
if (image->previous == (Image *) NULL)
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- Ascii85Encode(image,ScaleQuantumToChar(
- GetPixelIntensity(image,p)));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ GetPixelLuma(image,p))));
p+=GetPixelChannels(image);
}
if (image->previous == (Image *) NULL)
break;
for (x=0; x < (ssize_t) tile_image->columns; x++)
{
- *q++=ScaleQuantumToChar(GetPixelIntensity(tile_image,p));
+ *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(
+ tile_image,p)));
p+=GetPixelChannels(tile_image);
}
}
break;
for (x=0; x < (ssize_t) tile_image->columns; x++)
{
- Ascii85Encode(image,
- ScaleQuantumToChar(GetPixelIntensity(tile_image,p)));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ GetPixelLuma(tile_image,p))));
p+=GetPixelChannels(tile_image);
}
}
{
if (compression == NoCompression)
{
- Ascii85Encode(image,ScaleQuantumToChar(image->colormap[i].red));
- Ascii85Encode(image,ScaleQuantumToChar(image->colormap[i].green));
- Ascii85Encode(image,ScaleQuantumToChar(image->colormap[i].blue));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ image->colormap[i].red)));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ image->colormap[i].green)));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ image->colormap[i].blue)));
continue;
}
- (void) WriteBlobByte(image,
- ScaleQuantumToChar(image->colormap[i].red));
- (void) WriteBlobByte(image,
- ScaleQuantumToChar(image->colormap[i].green));
- (void) WriteBlobByte(image,
- ScaleQuantumToChar(image->colormap[i].blue));
+ (void) WriteBlobByte(image,ScaleQuantumToChar(
+ ClampToQuantum(image->colormap[i].red)));
+ (void) WriteBlobByte(image,ScaleQuantumToChar(
+ ClampToQuantum(image->colormap[i].green)));
+ (void) WriteBlobByte(image,ScaleQuantumToChar(
+ ClampToQuantum(image->colormap[i].blue)));
}
if (compression == NoCompression)
Ascii85Flush(image);
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- pixel=GetPixelIntensity(image,p);
+ pixel=ClampToQuantum(GetPixelLuma(image,p));
*q++=(unsigned char) (pixel >= (Quantum) (QuantumRange/2) ?
'0' : '1');
*q++=' ';
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- index=GetPixelIntensity(image,p);
+ index=ClampToQuantum(GetPixelLuma(image,p));
if (image->depth <= 8)
count=(ssize_t) FormatLocaleString(buffer,MaxTextExtent,"%u ",
ScaleQuantumToChar(index));
for (x=0; x < (ssize_t) image->columns; x++)
{
if (IsPixelGray(image,p) == MagickFalse)
- pixel=ScaleQuantumToAny(GetPixelIntensity(image,p),range);
+ pixel=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(
+ image,p)),range);
else
{
if (image->depth == 8)
for (x=0; x < (ssize_t) image->columns; x++)
{
if (IsPixelGray(image,p) == MagickFalse)
- pixel=ScaleQuantumToAny(GetPixelIntensity(image,p),range);
+ pixel=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(
+ image,p)),range);
else
{
if (image->depth == 16)
if (image->depth <= 8)
for (x=0; x < (ssize_t) image->columns; x++)
{
- pixel=ScaleQuantumToAny(GetPixelIntensity(image,p),range);
+ pixel=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(
+ image,p)),range);
q=PopCharPixel((unsigned char) pixel,q);
if (image->alpha_trait == BlendPixelTrait)
{
pixel=(unsigned char) ScaleQuantumToAny(
- GetPixelAlpha(image,p),range);
+ ClampToQuantum(GetPixelAlpha(image,p)),range);
q=PopCharPixel((unsigned char) pixel,q);
}
p+=GetPixelChannels(image);
else
for (x=0; x < (ssize_t) image->columns; x++)
{
- pixel=ScaleQuantumToAny(GetPixelIntensity(image,p),range);
+ pixel=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(
+ image,p)),range);
q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
if (image->alpha_trait == BlendPixelTrait)
{
hex_digits[256];
size_t
- length,
- priority;
+ length;
ssize_t
- count;
+ count,
+ priority;
StringInfo
*profile;
} \
else \
{ \
- q=PopHexPixel(hex_digits,ScaleQuantumToChar(pixel.red),q); \
- q=PopHexPixel(hex_digits,ScaleQuantumToChar(pixel.green),q); \
- q=PopHexPixel(hex_digits,ScaleQuantumToChar(pixel.blue),q); \
+ q=PopHexPixel(hex_digits,ScaleQuantumToChar(ClampToQuantum(pixel.red)),q); \
+ q=PopHexPixel(hex_digits,ScaleQuantumToChar(ClampToQuantum(pixel.green)),q); \
+ q=PopHexPixel(hex_digits,ScaleQuantumToChar(ClampToQuantum(pixel.blue)),q); \
} \
q=PopHexPixel(hex_digits,(size_t) MagickMin(length,0xff),q); \
}
for (x=0; x < (ssize_t) preview_image->columns; x++)
{
byte<<=1;
- pixel=GetPixelIntensity(preview_image,p);
+ pixel=ClampToQuantum(GetPixelLuma(preview_image,p));
if (pixel >= (Quantum) (QuantumRange/2))
byte|=0x01;
bit++;
labels=(char **) RelinquishMagickMemory(labels);
}
(void) ResetMagickMemory(&pixel,0,sizeof(pixel));
- pixel.alpha=(Quantum) TransparentAlpha;
+ pixel.alpha=(MagickRealType) TransparentAlpha;
index=0;
x=0;
if ((image_info->type != TrueColorType) &&
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- pixel=(Quantum) ScaleQuantumToChar(GetPixelIntensity(image,p));
+ pixel=(Quantum) ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(
+ image,p)));
q=PopHexPixel(hex_digits,(size_t) pixel,q);
i++;
if ((q-pixels+8) >= 80)
for (x=0; x < (ssize_t) image->columns; x++)
{
byte<<=1;
- pixel=GetPixelIntensity(image,p);
+ pixel=ClampToQuantum(GetPixelLuma(image,p));
if (pixel >= (Quantum) (QuantumRange/2))
byte|=0x01;
bit++;
length=255;
for (x=0; x < (ssize_t) image->columns; x++)
{
- if ((GetPixelRed(image,p) == pixel.red) &&
- (GetPixelGreen(image,p) == pixel.green) &&
- (GetPixelBlue(image,p) == pixel.blue) &&
- (GetPixelAlpha(image,p) == pixel.alpha) &&
+ if ((GetPixelRed(image,p) == ClampToQuantum(pixel.red)) &&
+ (GetPixelGreen(image,p) == ClampToQuantum(pixel.green)) &&
+ (GetPixelBlue(image,p) == ClampToQuantum(pixel.blue)) &&
+ (GetPixelAlpha(image,p) == ClampToQuantum(pixel.alpha)) &&
(length < 255) && (x < (ssize_t) (image->columns-1)))
length++;
else
for (i=0; i < (ssize_t) image->colors; i++)
{
(void) FormatLocaleString(buffer,MaxTextExtent,"%02X%02X%02X\n",
- ScaleQuantumToChar(image->colormap[i].red),
- ScaleQuantumToChar(image->colormap[i].green),
- ScaleQuantumToChar(image->colormap[i].blue));
+ ScaleQuantumToChar(ClampToQuantum(image->colormap[i].red)),
+ ScaleQuantumToChar(ClampToQuantum(image->colormap[i].green)),
+ ScaleQuantumToChar(ClampToQuantum(image->colormap[i].blue)));
(void) WriteBlobString(image,buffer);
}
switch (image_info->compression)
length=0;
}
index=GetPixelIndex(image,p);
- pixel.red=GetPixelRed(image,p);
- pixel.green=GetPixelGreen(image,p);
- pixel.blue=GetPixelBlue(image,p);
- pixel.alpha=GetPixelAlpha(image,p);
+ pixel.red=(MagickRealType) GetPixelRed(image,p);
+ pixel.green=(MagickRealType) GetPixelGreen(image,p);
+ pixel.blue=(MagickRealType) GetPixelBlue(image,p);
+ pixel.alpha=(MagickRealType) GetPixelAlpha(image,p);
p+=GetPixelChannels(image);
}
q=PopHexPixel(hex_digits,(size_t) index,q);
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
+ *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
p+=GetPixelChannels(image);
}
progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- Ascii85Encode(image,ScaleQuantumToChar(
- GetPixelIntensity(image,p)));
+ Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+ GetPixelLuma(image,p))));
p+=GetPixelChannels(image);
}
progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType)
if (pack == 1)
for (x=0; x < (ssize_t) image->columns; x++)
{
- *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
+ *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
p+=GetPixelChannels(image);
}
else
{
bit=(unsigned char) 0x00;
if (x < (ssize_t) image->columns)
- bit=(unsigned char) (GetPixelIntensity(image,p) == (Quantum)
- TransparentAlpha ? 0x01 : 0x00);
+ bit=(unsigned char) (GetPixelLuma(image,p) == TransparentAlpha ?
+ 0x01 : 0x00);
code=(code << 1)+bit;
if (((x+1) % pack) == 0)
{
for (x=0; x < (ssize_t) image->columns; x++)
{
byte<<=1;
- if (GetPixelIntensity(image,p) < (double) (QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x01;
bit++;
if (bit == 8)
else
if (targa_info.image_type == TargaMonochrome)
*q++=(unsigned char) ScaleQuantumToChar((ClampToQuantum(
- GetPixelIntensity(image,p))));
+ GetPixelLuma(image,p))));
else
{
*q++=ScaleQuantumToChar(GetPixelBlue(image,p));
{
for (bit=0; bit < 8; bit++)
{
- if (GetPixelIntensity(image,q) < ((double) QuantumRange/2.0))
+ if (GetPixelLuma(image,q) < (QuantumRange/2.0))
{
quantum=(size_t) GetPixelIndex(image,q);
quantum|=0x01;
if ((image->columns % 8) != 0)
{
for (bit=0; bit < (ssize_t) (image->columns % 8); bit++)
- if (GetPixelIntensity(image,q) < ((double) QuantumRange/2.0))
+ if (GetPixelLuma(image,q) < (QuantumRange/2.0))
{
quantum=(size_t) GetPixelIndex(image,q);
quantum|=0x01;
for (x=0; x < (ssize_t) image->columns; x++)
{
byte>>=1;
- if (GetPixelIntensity(image,p) < ((double) QuantumRange/2.0))
+ if (GetPixelLuma(image,p) < (QuantumRange/2.0))
byte|=0x80;
bit++;
if (bit == 8)
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- *q++=(unsigned char) GetPixelIntensity(image,p);
+ *q++=(unsigned char) ClampToQuantum(GetPixelLuma(image,p));
p+=GetPixelChannels(image);
}
if (image->previous == (Image *) NULL)
byte=0;
for (x=0; x < (ssize_t) image->columns; x++)
{
- if (GetPixelIntensity(image,p) >= ((double) QuantumRange/2.0))
+ if (GetPixelLuma(image,p) >= (QuantumRange/2.0))
byte|=0x1 << (7-bit);
bit++;
if (bit == 8)
WPGColorMapRec
WPG_Palette;
+ WPGPSl1Record
+ WPG_Record;
+
int
i,
bpp,
assert(image_info->signature == MagickSignature);
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
+ (void) WPG_Record;
one=1;
image=AcquireImage(image_info,exception);
image->depth=8;
for (x=0; x < (ssize_t) image->columns; x++)
{
byte>>=1;
- if (GetPixelIntensity(image,p) < (QuantumRange/2))
+ if (GetPixelLuma(image,p) < (QuantumRange/2))
byte|=0x80;
bit++;
if (bit == 8)