Panda3D
Classes | Public Member Functions | List of all members
PNMImage Class Reference

The name of this class derives from the fact that we originally implemented it as a layer on top of the "pnm library", based on netpbm, which was built to implement pbm, pgm, and pbm files, and is the underlying support of a number of public-domain image file converters. More...

Inheritance diagram for PNMImage:
PNMImageHeader

Classes

class  CRow
 
class  Row
 

Public Member Functions

 __init__ ()
 
 __init__ (const Filename filename, PNMFileType type)
 
 __init__ (const PNMImage copy)
 
 __init__ (int x_size, int y_size, int num_channels, Xelval maxval, PNMFileType type, ColorSpace color_space)
 
 addAlpha ()
 Adds an alpha channel to the image, if it does not already have one. More...
 
 addSubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size, float pixel_scale)
 Behaves like copy_sub_image(), except the copy pixels are added to the pixels of the destination, after scaling by the specified pixel_scale. More...
 
 alphaFill (float alpha)
 Sets the entire alpha channel to the given level. More...
 
 alphaFillVal (Xelval alpha)
 Sets the entire alpha channel to the given level. More...
 
 applyExponent (float gray_exponent)
 Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent. More...
 
 applyExponent (float gray_exponent, float alpha_exponent)
 Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent. More...
 
 applyExponent (float red_exponent, float green_exponent, float blue_exponent)
 Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent. More...
 
 applyExponent (float red_exponent, float green_exponent, float blue_exponent, float alpha_exponent)
 Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent. More...
 
 blend (int x, int y, const LRGBColorf val, float alpha)
 Smoothly blends the indicated pixel value in with whatever was already in the image, based on the given alpha value. More...
 
 blend (int x, int y, float r, float g, float b, float alpha)
 Smoothly blends the indicated pixel value in with whatever was already in the image, based on the given alpha value. More...
 
 blendSubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size, float pixel_scale)
 Behaves like copy_sub_image(), except the alpha channel of the copy is used to blend the copy into the destination image, instead of overwriting pixels unconditionally. More...
 
 boxFilter (float radius)
 This flavor of box_filter() will apply the filter over the entire image without resizing or copying; the effect is that of a blur operation. More...
 
 boxFilterFrom (float radius, const PNMImage copy)
 Makes a resized copy of the indicated image into this one using the indicated filter. More...
 
Xelval clampVal (int input_value)
 A handy function to clamp values to [0..get_maxval()]. More...
 
 clear ()
 Frees all memory allocated for the image, and clears all its parameters (size, color, type, etc). More...
 
 clear (int x_size, int y_size, int num_channels, Xelval maxval, PNMFileType type, ColorSpace color_space)
 This flavor of clear() reinitializes the image to an empty (black) image with the given dimensions. More...
 
 clearReadSize ()
 Undoes the effect of a previous call to set_read_size(). More...
 
 copyChannel (const PNMImage copy, int src_channel, int dest_channel)
 Copies a channel from one image into another. More...
 
 copyChannel (const PNMImage copy, int xto, int yto, int cto, int xfrom, int yfrom, int cfrom, int x_size, int y_size)
 Copies just a single channel from the source image into a single channel of this image, leaving the remaining channels alone. More...
 
 copyChannelBits (const PNMImage copy, int src_channel, int dest_channel, Xelval src_mask, int right_shift)
 Copies some subset of the bits of the specified channel from one image into some subset of the bits of the specified channel in another image. More...
 
 copyFrom (const PNMImage copy)
 Makes this image become a copy of the other image. More...
 
 copyHeaderFrom (const PNMImageHeader header)
 Copies just the header information into this image. More...
 
 copySubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size)
 Copies a rectangular area of another image into a rectangular area of this image. More...
 
 darkenSubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size, float pixel_scale)
 Behaves like copy_sub_image(), but the resulting color will be the darker of the source and destination colors at each pixel (and at each R, G, B, A component value). More...
 
 doFillDistance (int xi, int yi, int d)
 Recursively fills in the minimum distance measured from a certain set of points into the gray channel. More...
 
 expandBorder (int left, int right, int bottom, int top, const LColorf color)
 Expands the image by the indicated number of pixels on each edge. More...
 
 fill (float gray)
 Sets the entire image (except the alpha channel) to the given grayscale level. More...
 
 fill (float red, float green, float blue)
 Sets the entire image (except the alpha channel) to the given color. More...
 
 fillDistanceInside (const PNMImage mask, float threshold, int radius, bool shrink_from_border)
 Replaces this image with a grayscale image whose gray channel represents the linear Manhattan distance from the nearest dark pixel in the given mask image, up to the specified radius value (which also becomes the new maxval). More...
 
 fillDistanceOutside (const PNMImage mask, float threshold, int radius)
 Replaces this image with a grayscale image whose gray channel represents the linear Manhattan distance from the nearest white pixel in the given mask image, up to the specified radius value (which also becomes the new maxval). More...
 
 fillVal (Xelval gray)
 Sets the entire image (except the alpha channel) to the given grayscale level. More...
 
 fillVal (Xelval red, Xelval green, Xelval blue)
 Sets the entire image (except the alpha channel) to the given color. More...
 
 flip (bool flip_x, bool flip_y, bool transpose)
 Reverses, transposes, and/or rotates the image in-place according to the specified parameters. More...
 
float fromAlphaVal (Xelval input_value)
 A handy function to scale alpha values from [0..get_maxval()] to [0..1]. More...
 
float fromVal (Xelval input_value)
 A handy function to scale non-alpha values from [0..get_maxval()] to [0..1]. More...
 
 gammaCorrect (float from_gamma, float to_gamma)
 Assuming the image was constructed with a gamma curve of from_gamma in the RGB channels, converts it to an image with a gamma curve of to_gamma in the RGB channels. More...
 
 gammaCorrectAlpha (float from_gamma, float to_gamma)
 Assuming the image was constructed with a gamma curve of from_gamma in the alpha channel, converts it to an image with a gamma curve of to_gamma in the alpha channel. More...
 
 gaussianFilter (float radius)
 This flavor of gaussian_filter() will apply the filter over the entire image without resizing or copying; the effect is that of a blur operation. More...
 
 gaussianFilterFrom (float radius, const PNMImage copy)
 Makes a resized copy of the indicated image into this one using the indicated filter. More...
 
float getAlpha (int x, int y)
 Returns the alpha component color at the indicated pixel. More...
 
Xelval getAlphaVal (int x, int y)
 Returns the alpha component color at the indicated pixel. More...
 
float getAverageGray ()
 Returns the average grayscale component of all of the pixels in the image. More...
 
LRGBColorf getAverageXel ()
 Returns the average color of all of the pixels in the image. More...
 
LColorf getAverageXelA ()
 Returns the average color of all of the pixels in the image, including the alpha channel. More...
 
float getBlue (int x, int y)
 Returns the blue component color at the indicated pixel. More...
 
Xelval getBlueVal (int x, int y)
 Returns the blue component color at the indicated pixel. More...
 
float getBright (int x, int y)
 Returns the linear brightness of the given xel, as a linearized float in the range 0..1. More...
 
float getBright (int x, int y, float rc, float gc, float bc)
 This flavor of get_bright() works correctly only for color images. More...
 
float getBright (int x, int y, float rc, float gc, float bc, float ac)
 This flavor of get_bright() works correctly only for four-channel images. More...
 
float getChannel (int x, int y, int channel)
 Returns the nth component color at the indicated pixel. More...
 
Xelval getChannelVal (int x, int y, int channel)
 Returns the nth component color at the indicated pixel. More...
 
ColorSpace getColorSpace ()
 Returns the color space in which the image is encoded. More...
 
float getGray (int x, int y)
 Returns the gray component color at the indicated pixel. More...
 
Xelval getGrayVal (int x, int y)
 Returns the gray component color at the indicated pixel. More...
 
float getGreen (int x, int y)
 Returns the green component color at the indicated pixel. More...
 
Xelval getGreenVal (int x, int y)
 Returns the green component color at the indicated pixel. More...
 
PNMImageHeader::PixelSpec getPixel (int x, int y)
 Returns the (r, g, b, a) pixel value at the indicated pixel, using a PixelSpec object. More...
 
int getReadXSize ()
 Returns the requested x_size of the image if set_read_size() has been called, or the image x_size otherwise (if it is known). More...
 
int getReadYSize ()
 Returns the requested y_size of the image if set_read_size() has been called, or the image y_size otherwise (if it is known). More...
 
float getRed (int x, int y)
 Returns the red component color at the indicated pixel. More...
 
Xelval getRedVal (int x, int y)
 Returns the red component color at the indicated pixel. More...
 
LRGBColorf getXel (int x, int y)
 Returns the RGB color at the indicated pixel. More...
 
LColorf getXelA (int x, int y)
 Returns the RGBA color at the indicated pixel. More...
 
Xel getXelVal (int x, int y)
 Returns the RGB color at the indicated pixel. More...
 
Xel getXelVal (int x, int y)
 Returns the RGB color at the indicated pixel. More...
 
bool hasReadSize ()
 Returns true if set_read_size() has been called. More...
 
 indirect1dLookup (const PNMImage index_image, int channel, const PNMImage pixel_values)
 index_image is a WxH grayscale image, while pixel_values is an Nx1 color (or grayscale) image. More...
 
bool isValid ()
 Returns true if the image has been read in or correctly initialized with a height and width. More...
 
 lightenSubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size, float pixel_scale)
 Behaves like copy_sub_image(), but the resulting color will be the lighter of the source and destination colors at each pixel (and at each R, G, B, A component value). More...
 
 makeGrayscale ()
 Converts the image from RGB to grayscale. More...
 
 makeGrayscale (float rc, float gc, float bc)
 Converts the image from RGB to grayscale. More...
 
 makeHistogram (PNMImageHeader::Histogram hist)
 Computes a histogram of the colors used in the image. More...
 
 makeRgb ()
 Converts the image from grayscale to RGB. More...
 
 multSubImage (const PNMImage copy, int xto, int yto, int xfrom, int yfrom, int x_size, int y_size, float pixel_scale)
 Behaves like copy_sub_image(), except the copy pixels are multiplied to the pixels of the destination, after scaling by the specified pixel_scale. More...
 
PNMImage operator * (const LColorf other)
 
PNMImage operator * (const PNMImage other)
 
PNMImage operator * (float multiplier)
 
PNMImage operator *= (const LColorf other)
 
PNMImage operator *= (const PNMImage other)
 
PNMImage operator *= (float multiplier)
 
PNMImage operator - (const LColorf other)
 
PNMImage operator - (const PNMImage other)
 
PNMImage operator -= (const LColorf other)
 
PNMImage operator -= (const PNMImage other)
 
PNMImage::Row operator [] (int y)
 
PNMImage::CRow operator [] (int y)
 
PNMImage operator ~ ()
 
PNMImage operator+ (const LColorf other)
 
PNMImage operator+ (const PNMImage other)
 
PNMImage operator+= (const LColorf other)
 
PNMImage operator+= (const PNMImage other)
 
PNMImage operator= (const PNMImage copy)
 
 perlinNoiseFill (StackedPerlinNoise2 perlin)
 Variant of perlin_noise_fill that uses an existing StackedPerlinNoise2 object. More...
 
 perlinNoiseFill (float sx, float sy, int table_size, unsigned long int seed)
 Fills the image with a grayscale perlin noise pattern based on the indicated parameters. More...
 
 premultiplyAlpha ()
 Converts an image in-place to its "premultiplied" form, where, for every pixel in the image, the red, green, and blue components are multiplied by that pixel's alpha value. More...
 
 quickFilterFrom (const PNMImage copy, int xborder, int yborder)
 Resizes from the given image, with a fixed radius of 0.5. More...
 
bool read (const Filename filename, PNMFileType type, bool report_unknown_type)
 Reads the indicated image filename. More...
 
bool read (PNMReader reader)
 This flavor of read() uses an already-existing PNMReader to read the image file. More...
 
bool read (Istream data, str filename, PNMFileType type, bool report_unknown_type)
 Reads the image data from the indicated stream. More...
 
 remixChannels (const LMatrix4 conv)
 Transforms every pixel using the operation (Ro,Go,Bo) = conv.xform_point(Ri,Gi,Bi); Input must be a color image. More...
 
 removeAlpha ()
 Removes the image's alpha channel, if it exists. More...
 
 renderSpot (const LColorf fg, const LColorf bg, float min_radius, float max_radius)
 Renders a solid-color circle, with a fuzzy edge, into the center of the PNMImage. More...
 
 rescale (float min_val, float max_val)
 Rescales the RGB channel values so that any values in the original image between min_val and max_val are expanded to the range 0 . More...
 
 reverseRows ()
 Performs an in-place reversal of the row (y) data. More...
 
 setAlpha (int x, int y, float a)
 Sets the alpha component color only at the indicated pixel. More...
 
 setAlphaVal (int x, int y, Xelval a)
 Sets the alpha component color only at the indicated pixel. More...
 
 setBlue (int x, int y, float b)
 Sets the blue component color only at the indicated pixel. More...
 
 setBlueVal (int x, int y, Xelval b)
 Sets the blue component color only at the indicated pixel. More...
 
 setChannel (int x, int y, int channel, float value)
 Sets the nth component color at the indicated pixel. More...
 
 setChannelVal (int x, int y, int channel, Xelval value)
 Sets the nth component color at the indicated pixel. More...
 
 setColorSpace (ColorSpace color_space)
 Converts the colors in the image to the indicated color space. More...
 
 setColorType (PNMImageHeader::ColorType color_type)
 Translates the image to or from grayscale, color, or four-color mode. More...
 
 setGray (int x, int y, float gray)
 Sets the gray component color at the indicated pixel. More...
 
 setGrayVal (int x, int y, Xelval gray)
 Sets the gray component color at the indicated pixel. More...
 
 setGreen (int x, int y, float g)
 Sets the green component color only at the indicated pixel. More...
 
 setGreenVal (int x, int y, Xelval g)
 Sets the green component color only at the indicated pixel. More...
 
 setMaxval (Xelval maxval)
 Rescales the image to the indicated maxval. More...
 
 setNumChannels (int num_channels)
 Changes the number of channels associated with the image. More...
 
 setPixel (int x, int y, const PNMImageHeader::PixelSpec pixel)
 Sets the (r, g, b, a) pixel value at the indicated pixel, using a PixelSpec object. More...
 
 setReadSize (int x_size, int y_size)
 Specifies the size to we'd like to scale the image upon reading it. More...
 
 setRed (int x, int y, float r)
 Sets the red component color only at the indicated pixel. More...
 
 setRedVal (int x, int y, Xelval r)
 Sets the red component color only at the indicated pixel. More...
 
 setXel (int x, int y, const LRGBColorf value)
 Changes the RGB color at the indicated pixel. More...
 
 setXel (int x, int y, float gray)
 Changes all three color components at the indicated pixel to the same value. More...
 
 setXel (int x, int y, float r, float g, float b)
 Changes the RGB color at the indicated pixel. More...
 
 setXelA (int x, int y, const LColorf value)
 Changes the RGBA color at the indicated pixel. More...
 
 setXelA (int x, int y, float r, float g, float b, float a)
 Changes the RGBA color at the indicated pixel. More...
 
 setXelVal (int x, int y, const Xel value)
 Changes the RGB color at the indicated pixel. More...
 
 setXelVal (int x, int y, Xelval gray)
 Changes all three color components at the indicated pixel to the same value. More...
 
 setXelVal (int x, int y, Xelval r, Xelval g, Xelval b)
 Changes the RGB color at the indicated pixel. More...
 
 takeFrom (PNMImage orig)
 Move the contents of the other image into this one, and empty the other image. More...
 
 threshold (const PNMImage select_image, int channel, float threshold, const PNMImage lt, const PNMImage ge)
 Selectively copies each pixel from either one source or another source, depending on the pixel value of the indicated channel of select_image. More...
 
Xelval toAlphaVal (float input_value)
 A handy function to scale alpha values from [0..1] to [0..get_maxval()]. More...
 
Xelval toVal (float input_value)
 A handy function to scale non-alpha values from [0..1] to [0..get_maxval()]. More...
 
 unfilteredStretchFrom (const PNMImage copy)
 Resizes from the indicated image into this one by performing a nearest- point sample. More...
 
 unpremultiplyAlpha ()
 Converts an image in-place to its "straight alpha" form (presumably from a "premultiplied" form), where, for every pixel in the image, the red, green, and blue components are divided by that pixel's alpha value. More...
 
bool write (const Filename filename, PNMFileType type)
 Writes the image to the indicated filename. More...
 
bool write (PNMWriter writer)
 This flavor of write() uses an already-existing PNMWriter to write the image file. More...
 
bool write (Ostream data, str filename, PNMFileType type)
 Writes the image to the indicated ostream. More...
 
- Public Member Functions inherited from PNMImageHeader
 __init__ ()
 
 __init__ (const PNMImageHeader copy)
 
ColorSpace getColorSpace ()
 Returns the color space that the image is encoded in, or CS_unspecified if unknown. More...
 
PNMImageHeader::ColorType getColorType ()
 Returns the image type of the image, as an enumerated value. More...
 
str getComment ()
 Gets the user comment from the file. More...
 
Xelval getMaxval ()
 Returns the maximum channel value allowable for any pixel in this image; for instance, 255 for a typical 8-bit-per-channel image. More...
 
int getNumChannels ()
 Returns the number of channels in the image. More...
 
LVecBase2i getSize ()
 Returns the number of pixels in each direction. More...
 
PNMFileType getType ()
 If the file type is known (e.g. More...
 
int getXSize ()
 Returns the number of pixels in the X direction. More...
 
int getYSize ()
 Returns the number of pixels in the Y direction. More...
 
bool hasAlpha ()
 Returns true if the image includes an alpha channel, false otherwise. More...
 
bool hasType ()
 Returns true if the PNMImageHeader knows what type it is, false otherwise. More...
 
bool isGrayscale ()
 Returns false if the image is a full-color image, and has red, green, and blue components; true if it is a grayscale image and has only a gray component. More...
 
PNMReader makeReader (const Filename filename, PNMFileType type, bool report_unknown_type)
 Returns a newly-allocated PNMReader of the suitable type for reading from the indicated image filename, or NULL if the filename cannot be read for some reason. More...
 
PNMReader makeReader (Istream file, bool owns_file, const Filename filename, str magic_number, PNMFileType type, bool report_unknown_type)
 Returns a newly-allocated PNMReader of the suitable type for reading from the already-opened image file, or NULL if the file cannot be read for some reason. More...
 
PNMWriter makeWriter (const Filename filename, PNMFileType type)
 Returns a newly-allocated PNMWriter of the suitable type for writing an image to the indicated filename, or NULL if the filename cannot be written for some reason. More...
 
PNMWriter makeWriter (Ostream file, bool owns_file, const Filename filename, PNMFileType type)
 Returns a newly-allocated PNMWriter of the suitable type for writing to the already-opened image file, or NULL if the file cannot be written for some reason. More...
 
PNMImageHeader operator= (const PNMImageHeader copy)
 
 output (Ostream out)
 
bool readHeader (const Filename filename, PNMFileType type, bool report_unknown_type)
 Opens up the image file and tries to read its header information to determine its size, number of channels, etc. More...
 
bool readHeader (Istream data, str filename, PNMFileType type, bool report_unknown_type)
 Reads the image header information only from the indicated stream. More...
 
 setComment (str comment)
 Writes a user comment string to the image (header). More...
 
 setType (PNMFileType type)
 Sets the file type of this PNMImage. More...
 

Additional Inherited Members

- Public Types inherited from PNMImageHeader
enum  ColorType {
  CT_invalid = 0, CT_grayscale = 1, CT_two_channel = 2, CT_color = 3,
  CT_four_channel = 4
}
 
- Static Public Member Functions inherited from PNMImageHeader
static bool hasAlpha (PNMImageHeader::ColorType color_type)
 This static variant of has_alpha() returns true if the indicated image type includes an alpha channel, false otherwise. More...
 
static bool isGrayscale (PNMImageHeader::ColorType color_type)
 This static variant of is_grayscale() returns true if the indicated image type represents a grayscale image, false otherwise. More...
 
- Public Attributes inherited from PNMImageHeader
ColorSpace color_space
 Returns the color space that the image is encoded in, or CS_unspecified if unknown. More...
 
String comment
 Gets the user comment from the file. More...
 
Xelval maxval
 Returns the maximum channel value allowable for any pixel in this image; for instance, 255 for a typical 8-bit-per-channel image. More...
 
int num_channels
 Returns the number of channels in the image. More...
 
LVecBase2i size
 Returns the number of pixels in each direction. More...
 
PNMFileType type
 If the file type is known (e.g. More...
 

Detailed Description

The name of this class derives from the fact that we originally implemented it as a layer on top of the "pnm library", based on netpbm, which was built to implement pbm, pgm, and pbm files, and is the underlying support of a number of public-domain image file converters.

Nowadays we are no longer derived directly from the pnm library, mainly to allow support of C++ iostreams instead of the C stdio FILE interface.

Conceptually, a PNMImage is a two-dimensional array of xels, which are the PNM-defined generic pixel type. Each xel may have a red, green, and blue component, or (if the image is grayscale) a gray component. The image may be read in, the individual xels manipulated, and written out again, or a black image may be constructed from scratch.

A PNMImage has a color space and a maxval, the combination of which defines how a floating-point linear color value is encoded as an integer value in memory. The functions ending in _val operate on encoded colors, whereas the regular ones work with linear floating-point values. All operations are color space correct unless otherwise specified.

The image is of size XSize() by YSize() xels, numbered from top to bottom, left to right, beginning at zero.

Files can be specified by filename, or by an iostream pointer. The filename "-" refers to stdin or stdout.

This class is not inherently thread-safe; use it from a single thread or protect access using a mutex.

Member Function Documentation

◆ __init__() [1/4]

__init__ ( )

◆ __init__() [2/4]

__init__ ( const Filename  filename,
PNMFileType  type 
)

◆ __init__() [3/4]

__init__ ( const PNMImage  copy)

◆ __init__() [4/4]

__init__ ( int  x_size,
int  y_size,
int  num_channels,
Xelval  maxval,
PNMFileType  type,
ColorSpace  color_space 
)

◆ addAlpha()

addAlpha ( )

Adds an alpha channel to the image, if it does not already have one.

The alpha channel is initialized to zeros.

◆ addSubImage()

addSubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size,
float  pixel_scale 
)

Behaves like copy_sub_image(), except the copy pixels are added to the pixels of the destination, after scaling by the specified pixel_scale.

Unlike blend_sub_image(), the alpha channel is not treated specially.

◆ alphaFill()

alphaFill ( float  alpha)

Sets the entire alpha channel to the given level.

◆ alphaFillVal()

alphaFillVal ( Xelval  alpha)

Sets the entire alpha channel to the given level.

◆ applyExponent() [1/4]

applyExponent ( float  gray_exponent)

Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent.

◆ applyExponent() [2/4]

applyExponent ( float  gray_exponent,
float  alpha_exponent 
)

Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent.

◆ applyExponent() [3/4]

applyExponent ( float  red_exponent,
float  green_exponent,
float  blue_exponent 
)

Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent.

For a grayscale image, the blue_exponent value is used for the grayscale value, and red_exponent and green_exponent are unused.

◆ applyExponent() [4/4]

applyExponent ( float  red_exponent,
float  green_exponent,
float  blue_exponent,
float  alpha_exponent 
)

Adjusts each channel of the image by raising the corresponding component value to the indicated exponent, such that L' = L ^ exponent.

For a grayscale image, the blue_exponent value is used for the grayscale value, and red_exponent and green_exponent are unused.

◆ blend() [1/2]

blend ( int  x,
int  y,
const LRGBColorf  val,
float  alpha 
)

Smoothly blends the indicated pixel value in with whatever was already in the image, based on the given alpha value.

An alpha of 1.0 is fully opaque and completely replaces whatever was there previously; alpha of 0.0 is fully transparent and does nothing.

◆ blend() [2/2]

blend ( int  x,
int  y,
float  r,
float  g,
float  b,
float  alpha 
)

Smoothly blends the indicated pixel value in with whatever was already in the image, based on the given alpha value.

An alpha of 1.0 is fully opaque and completely replaces whatever was there previously; alpha of 0.0 is fully transparent and does nothing.

◆ blendSubImage()

blendSubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size,
float  pixel_scale 
)

Behaves like copy_sub_image(), except the alpha channel of the copy is used to blend the copy into the destination image, instead of overwriting pixels unconditionally.

If pixel_scale is not 1.0, it specifies an amount to scale each alpha value of the source image before applying it to the target image.

If pixel_scale is 1.0 and the copy has no alpha channel, this degenerates into copy_sub_image().

◆ boxFilter()

boxFilter ( float  radius)

This flavor of box_filter() will apply the filter over the entire image without resizing or copying; the effect is that of a blur operation.

◆ boxFilterFrom()

boxFilterFrom ( float  radius,
const PNMImage  copy 
)

Makes a resized copy of the indicated image into this one using the indicated filter.

The image to be copied is squashed and stretched to match the dimensions of the current image, applying the appropriate filter to perform the stretching.

◆ clampVal()

Xelval clampVal ( int  input_value)

A handy function to clamp values to [0..get_maxval()].

◆ clear() [1/2]

clear ( )

Frees all memory allocated for the image, and clears all its parameters (size, color, type, etc).

◆ clear() [2/2]

clear ( int  x_size,
int  y_size,
int  num_channels,
Xelval  maxval,
PNMFileType  type,
ColorSpace  color_space 
)

This flavor of clear() reinitializes the image to an empty (black) image with the given dimensions.

◆ clearReadSize()

clearReadSize ( )

Undoes the effect of a previous call to set_read_size().

◆ copyChannel() [1/2]

copyChannel ( const PNMImage  copy,
int  src_channel,
int  dest_channel 
)

Copies a channel from one image into another.

Images must be the same size

◆ copyChannel() [2/2]

copyChannel ( const PNMImage  copy,
int  xto,
int  yto,
int  cto,
int  xfrom,
int  yfrom,
int  cfrom,
int  x_size,
int  y_size 
)

Copies just a single channel from the source image into a single channel of this image, leaving the remaining channels alone.

◆ copyChannelBits()

copyChannelBits ( const PNMImage  copy,
int  src_channel,
int  dest_channel,
Xelval  src_mask,
int  right_shift 
)

Copies some subset of the bits of the specified channel from one image into some subset of the bits of the specified channel in another image.

Images must be the same size.

If right_shift is negative, it means a left shift.

◆ copyFrom()

copyFrom ( const PNMImage  copy)

Makes this image become a copy of the other image.

◆ copyHeaderFrom()

copyHeaderFrom ( const PNMImageHeader  header)

Copies just the header information into this image.

This will blow away any image data stored in the image. The new image data will be allocated, but left unitialized.

◆ copySubImage()

copySubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size 
)

Copies a rectangular area of another image into a rectangular area of this image.

Both images must already have been initialized. The upper-left corner of the region in both images is specified, and the size of the area; if the size is omitted, it defaults to the entire other image, or the largest piece that will fit.

◆ darkenSubImage()

darkenSubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size,
float  pixel_scale 
)

Behaves like copy_sub_image(), but the resulting color will be the darker of the source and destination colors at each pixel (and at each R, G, B, A component value).

If pixel_scale is not 1.0, it specifies an amount to scale each pixel value of the source image before applying it to the target image. The scale is applied with the center at 1.0: scaling the pixel value smaller brings it closer to 1.0.

◆ doFillDistance()

doFillDistance ( int  xi,
int  yi,
int  d 
)

Recursively fills in the minimum distance measured from a certain set of points into the gray channel.

◆ expandBorder()

expandBorder ( int  left,
int  right,
int  bottom,
int  top,
const LColorf  color 
)

Expands the image by the indicated number of pixels on each edge.

The new pixels are set to the indicated color.

If any of the values is negative, this actually crops the image.

◆ fill() [1/2]

fill ( float  gray)

Sets the entire image (except the alpha channel) to the given grayscale level.

◆ fill() [2/2]

fill ( float  red,
float  green,
float  blue 
)

Sets the entire image (except the alpha channel) to the given color.

◆ fillDistanceInside()

fillDistanceInside ( const PNMImage  mask,
float  threshold,
int  radius,
bool  shrink_from_border 
)

Replaces this image with a grayscale image whose gray channel represents the linear Manhattan distance from the nearest dark pixel in the given mask image, up to the specified radius value (which also becomes the new maxval).

radius may range from 0 to maxmaxval; smaller values will compute faster. A dark pixel is defined as one whose pixel value is < threshold.

If shrink_from_border is true, then the mask image is considered to be surrounded by a border of dark pixels; otherwise, the border isn't considered.

This can be used, in conjunction with threshold, to shrink a mask image inwards by a certain number of pixels.

The mask image may be the same image as this one, in which case it is destructively modified by this process.

◆ fillDistanceOutside()

fillDistanceOutside ( const PNMImage  mask,
float  threshold,
int  radius 
)

Replaces this image with a grayscale image whose gray channel represents the linear Manhattan distance from the nearest white pixel in the given mask image, up to the specified radius value (which also becomes the new maxval).

radius may range from 0 to maxmaxval; smaller values will compute faster. A white pixel is defined as one whose pixel value is >= threshold.

This can be used, in conjunction with threshold, to grow a mask image outwards by a certain number of pixels.

The mask image may be the same image as this one, in which case it is destructively modified by this process.

◆ fillVal() [1/2]

fillVal ( Xelval  gray)

Sets the entire image (except the alpha channel) to the given grayscale level.

◆ fillVal() [2/2]

fillVal ( Xelval  red,
Xelval  green,
Xelval  blue 
)

Sets the entire image (except the alpha channel) to the given color.

◆ flip()

flip ( bool  flip_x,
bool  flip_y,
bool  transpose 
)

Reverses, transposes, and/or rotates the image in-place according to the specified parameters.

If flip_x is true, the x axis is reversed; if flip_y is true, the y axis is reversed. Then, if transpose is true, the x and y axes are exchanged. These parameters can be used to select any combination of 90-degree or 180-degree rotations and flips.

◆ fromAlphaVal()

float fromAlphaVal ( Xelval  input_value)

A handy function to scale alpha values from [0..get_maxval()] to [0..1].

◆ fromVal()

float fromVal ( Xelval  input_value)

A handy function to scale non-alpha values from [0..get_maxval()] to [0..1].

Do not use this for alpha values, see from_alpha_val.

◆ gammaCorrect()

gammaCorrect ( float  from_gamma,
float  to_gamma 
)

Assuming the image was constructed with a gamma curve of from_gamma in the RGB channels, converts it to an image with a gamma curve of to_gamma in the RGB channels.

Does not affect the alpha channel.

◆ gammaCorrectAlpha()

gammaCorrectAlpha ( float  from_gamma,
float  to_gamma 
)

Assuming the image was constructed with a gamma curve of from_gamma in the alpha channel, converts it to an image with a gamma curve of to_gamma in the alpha channel.

Does not affect the RGB channels.

◆ gaussianFilter()

gaussianFilter ( float  radius)

This flavor of gaussian_filter() will apply the filter over the entire image without resizing or copying; the effect is that of a blur operation.

◆ gaussianFilterFrom()

gaussianFilterFrom ( float  radius,
const PNMImage  copy 
)

Makes a resized copy of the indicated image into this one using the indicated filter.

The image to be copied is squashed and stretched to match the dimensions of the current image, applying the appropriate filter to perform the stretching.

◆ getAlpha()

float getAlpha ( int  x,
int  y 
)

Returns the alpha component color at the indicated pixel.

It is an error to call this unless has_alpha() is true. The value returned is a float in the range 0..1.

◆ getAlphaVal()

Xelval getAlphaVal ( int  x,
int  y 
)

Returns the alpha component color at the indicated pixel.

It is an error to call this unless has_alpha() is true. The value returned is in the range 0..maxval and always linear.

◆ getAverageGray()

float getAverageGray ( )

Returns the average grayscale component of all of the pixels in the image.

◆ getAverageXel()

LRGBColorf getAverageXel ( )

Returns the average color of all of the pixels in the image.

◆ getAverageXelA()

LColorf getAverageXelA ( )

Returns the average color of all of the pixels in the image, including the alpha channel.

◆ getBlue()

float getBlue ( int  x,
int  y 
)

Returns the blue component color at the indicated pixel.

The value returned is a linearized float in the range 0..1.

◆ getBlueVal()

Xelval getBlueVal ( int  x,
int  y 
)

Returns the blue component color at the indicated pixel.

The value returned is in the range 0..maxval and encoded in the configured color space.

◆ getBright() [1/3]

float getBright ( int  x,
int  y 
)

Returns the linear brightness of the given xel, as a linearized float in the range 0..1.

This flavor of get_bright() returns the correct grayscale brightness level for both full-color and grayscale images.

◆ getBright() [2/3]

float getBright ( int  x,
int  y,
float  rc,
float  gc,
float  bc 
)

This flavor of get_bright() works correctly only for color images.

It returns a single brightness value for the RGB color at the indicated pixel, based on the supplied weights for each component.

◆ getBright() [3/3]

float getBright ( int  x,
int  y,
float  rc,
float  gc,
float  bc,
float  ac 
)

This flavor of get_bright() works correctly only for four-channel images.

It returns a single brightness value for the RGBA color at the indicated pixel, based on the supplied weights for each component.

◆ getChannel()

float getChannel ( int  x,
int  y,
int  channel 
)

Returns the nth component color at the indicated pixel.

The channel index should be in the range 0..(get_num_channels()-1). The channels are ordered B, G, R, A. This is slightly less optimal than accessing the component values directly by named methods. The value returned is a float in the range 0..1.

◆ getChannelVal()

Xelval getChannelVal ( int  x,
int  y,
int  channel 
)

Returns the nth component color at the indicated pixel.

The channel index should be in the range 0..(get_num_channels()-1). The channels are ordered B, G, R, A. This is slightly less optimal than accessing the component values directly by named methods. The value returned is in the range 0..maxval.

◆ getColorSpace()

ColorSpace getColorSpace ( )

Returns the color space in which the image is encoded.

◆ getGray()

float getGray ( int  x,
int  y 
)

Returns the gray component color at the indicated pixel.

This only has a meaningful value for grayscale images; for other image types, this returns the value of the blue channel only. However, also see the get_bright() function. The value returned is a linearized float in the range 0..1.

◆ getGrayVal()

Xelval getGrayVal ( int  x,
int  y 
)

Returns the gray component color at the indicated pixel.

This only has a meaningful value for grayscale images; for other image types, this returns the value of the blue channel only. However, also see the get_bright() function. The value returned is in the range 0..maxval and encoded in the configured color space.

◆ getGreen()

float getGreen ( int  x,
int  y 
)

Returns the green component color at the indicated pixel.

The value returned is a linearized float in the range 0..1.

◆ getGreenVal()

Xelval getGreenVal ( int  x,
int  y 
)

Returns the green component color at the indicated pixel.

The value returned is in the range 0..maxval and encoded in the configured color space.

◆ getPixel()

PNMImageHeader::PixelSpec getPixel ( int  x,
int  y 
)

Returns the (r, g, b, a) pixel value at the indicated pixel, using a PixelSpec object.

◆ getReadXSize()

int getReadXSize ( )

Returns the requested x_size of the image if set_read_size() has been called, or the image x_size otherwise (if it is known).

◆ getReadYSize()

int getReadYSize ( )

Returns the requested y_size of the image if set_read_size() has been called, or the image y_size otherwise (if it is known).

◆ getRed()

float getRed ( int  x,
int  y 
)

Returns the red component color at the indicated pixel.

The value returned is a linearized float in the range 0..1.

◆ getRedVal()

Xelval getRedVal ( int  x,
int  y 
)

Returns the red component color at the indicated pixel.

The value returned is in the range 0..maxval and encoded in the configured color space.

◆ getXel()

LRGBColorf getXel ( int  x,
int  y 
)

Returns the RGB color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ getXelA()

LColorf getXelA ( int  x,
int  y 
)

Returns the RGBA color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ getXelVal() [1/2]

Xel getXelVal ( int  x,
int  y 
)

Returns the RGB color at the indicated pixel.

Each component is in the range 0..maxval.

◆ getXelVal() [2/2]

Xel getXelVal ( int  x,
int  y 
)

Returns the RGB color at the indicated pixel.

Each component is in the range 0..maxval.

◆ hasReadSize()

bool hasReadSize ( )

Returns true if set_read_size() has been called.

◆ indirect1dLookup()

indirect1dLookup ( const PNMImage  index_image,
int  channel,
const PNMImage  pixel_values 
)

index_image is a WxH grayscale image, while pixel_values is an Nx1 color (or grayscale) image.

Typically pixel_values will be a 256x1 image.

Fills the PNMImage with a new image the same width and height as index_image, with the same number of channels as pixel_values.

Each pixel of the new image is computed with the formula:

new_image(x, y) = pixel_values(index_image(x, y)[channel], 0)

At present, no interpolation is performed; the nearest value in pixel_values is discovered. This may change in the future.

◆ isValid()

bool isValid ( )

Returns true if the image has been read in or correctly initialized with a height and width.

If this returns false, virtually all member functions except clear() and read() are invalid function calls.

◆ lightenSubImage()

lightenSubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size,
float  pixel_scale 
)

Behaves like copy_sub_image(), but the resulting color will be the lighter of the source and destination colors at each pixel (and at each R, G, B, A component value).

If pixel_scale is not 1.0, it specifies an amount to scale each pixel value of the source image before applying it to the target image.

◆ makeGrayscale() [1/2]

makeGrayscale ( )

Converts the image from RGB to grayscale.

Any alpha channel, if present, is left undisturbed.

◆ makeGrayscale() [2/2]

makeGrayscale ( float  rc,
float  gc,
float  bc 
)

Converts the image from RGB to grayscale.

Any alpha channel, if present, is left undisturbed. The optional rc, gc, bc values represent the relative weights to apply to each channel to convert it to grayscale.

◆ makeHistogram()

makeHistogram ( PNMImageHeader::Histogram  hist)

Computes a histogram of the colors used in the image.

◆ makeRgb()

makeRgb ( )

Converts the image from grayscale to RGB.

Any alpha channel, if present, is left undisturbed.

◆ multSubImage()

multSubImage ( const PNMImage  copy,
int  xto,
int  yto,
int  xfrom,
int  yfrom,
int  x_size,
int  y_size,
float  pixel_scale 
)

Behaves like copy_sub_image(), except the copy pixels are multiplied to the pixels of the destination, after scaling by the specified pixel_scale.

Unlike blend_sub_image(), the alpha channel is not treated specially.

◆ operator *() [1/3]

PNMImage operator * ( const LColorf  other)

◆ operator *() [2/3]

PNMImage operator * ( const PNMImage  other)

◆ operator *() [3/3]

PNMImage operator * ( float  multiplier)

◆ operator *=() [1/3]

PNMImage operator *= ( const LColorf  other)

◆ operator *=() [2/3]

PNMImage operator *= ( const PNMImage  other)

◆ operator *=() [3/3]

PNMImage operator *= ( float  multiplier)

◆ operator -() [1/2]

PNMImage operator - ( const LColorf  other)

◆ operator -() [2/2]

PNMImage operator - ( const PNMImage  other)

◆ operator -=() [1/2]

PNMImage operator -= ( const LColorf  other)

◆ operator -=() [2/2]

PNMImage operator -= ( const PNMImage  other)

◆ operator []() [1/2]

PNMImage::Row operator [] ( int  y)

◆ operator []() [2/2]

PNMImage::CRow operator [] ( int  y)

◆ operator ~()

PNMImage operator ~ ( )

◆ operator+() [1/2]

PNMImage operator+ ( const LColorf  other)

◆ operator+() [2/2]

PNMImage operator+ ( const PNMImage  other)

◆ operator+=() [1/2]

PNMImage operator+= ( const LColorf  other)

◆ operator+=() [2/2]

PNMImage operator+= ( const PNMImage  other)

◆ operator=()

PNMImage operator= ( const PNMImage  copy)

◆ perlinNoiseFill() [1/2]

perlinNoiseFill ( StackedPerlinNoise2  perlin)

Variant of perlin_noise_fill that uses an existing StackedPerlinNoise2 object.

◆ perlinNoiseFill() [2/2]

perlinNoiseFill ( float  sx,
float  sy,
int  table_size,
unsigned long int  seed 
)

Fills the image with a grayscale perlin noise pattern based on the indicated parameters.

Uses set_xel to set the grayscale values. The sx and sy parameters are in multiples of the size of this image. See also the PerlinNoise2 class in mathutil.

◆ premultiplyAlpha()

premultiplyAlpha ( )

Converts an image in-place to its "premultiplied" form, where, for every pixel in the image, the red, green, and blue components are multiplied by that pixel's alpha value.

This does not modify any alpha values.

◆ quickFilterFrom()

quickFilterFrom ( const PNMImage  copy,
int  xborder,
int  yborder 
)

Resizes from the given image, with a fixed radius of 0.5.

This is a very specialized and simple algorithm that doesn't handle dropping below the Nyquist rate very well, but is quite a bit faster than the more general box_filter(), above. If borders are specified, they will further restrict the size of the resulting image. There's no point in using quick_box_filter() on a single image.

◆ read() [1/3]

bool read ( const Filename  filename,
PNMFileType  type,
bool  report_unknown_type 
)

Reads the indicated image filename.

If type is non-NULL, it is a suggestion for the type of file it is. Returns true if successful, false on error.

◆ read() [2/3]

bool read ( PNMReader  reader)

This flavor of read() uses an already-existing PNMReader to read the image file.

You can get a reader via the PNMImageHeader::make_reader() methods. This is a good way to examine the header of a file (for instance, to determine its size) before actually reading the entire image.

The PNMReader is always deleted upon completion, whether successful or not.

◆ read() [3/3]

bool read ( Istream  data,
str  filename,
PNMFileType  type,
bool  report_unknown_type 
)

Reads the image data from the indicated stream.

The filename is advisory only, and may be used to suggest a type if it has a known extension.

If type is non-NULL, it is a suggestion for the type of file it is (and a non-NULL type will override any magic number test or filename extension lookup).

Returns true if successful, false on error.

◆ remixChannels()

remixChannels ( const LMatrix4  conv)

Transforms every pixel using the operation (Ro,Go,Bo) = conv.xform_point(Ri,Gi,Bi); Input must be a color image.

◆ removeAlpha()

removeAlpha ( )

Removes the image's alpha channel, if it exists.

◆ renderSpot()

renderSpot ( const LColorf  fg,
const LColorf  bg,
float  min_radius,
float  max_radius 
)

Renders a solid-color circle, with a fuzzy edge, into the center of the PNMImage.

If the PNMImage is non-square, this actually renders an ellipse.

The min_radius and max_radius are in the scale 0..1, where 1.0 means the full width of the image. If min_radius == max_radius, the edge is sharp (but still antialiased); otherwise, the pixels between min_radius and max_radius are smoothly blended between fg and bg colors.

◆ rescale()

rescale ( float  min_val,
float  max_val 
)

Rescales the RGB channel values so that any values in the original image between min_val and max_val are expanded to the range 0 .

. 1. Values below min_val are set to 0, and values above max_val are set to 1. Does not affect the alpha channel, if any.

◆ reverseRows()

reverseRows ( )

Performs an in-place reversal of the row (y) data.

◆ setAlpha()

setAlpha ( int  x,
int  y,
float  a 
)

Sets the alpha component color only at the indicated pixel.

It is an error to call this unless has_alpha() is true. The value given should be in the range 0..1.

◆ setAlphaVal()

setAlphaVal ( int  x,
int  y,
Xelval  a 
)

Sets the alpha component color only at the indicated pixel.

It is an error to call this unless has_alpha() is true. The value given should be in the range 0..maxval.

This value is always linearly encoded, even if the image is set to the sRGB color space.

◆ setBlue()

setBlue ( int  x,
int  y,
float  b 
)

Sets the blue component color only at the indicated pixel.

The value given should be a linearized float in the range 0..1.

◆ setBlueVal()

setBlueVal ( int  x,
int  y,
Xelval  b 
)

Sets the blue component color only at the indicated pixel.

The value given should be in the range 0..maxval, encoded in the configured color space. See set_blue if you instead have a linearized and normalized floating-point value.

◆ setChannel()

setChannel ( int  x,
int  y,
int  channel,
float  value 
)

Sets the nth component color at the indicated pixel.

The channel index should be in the range 0..(get_num_channels()-1). The channels are ordered B, G, R, A. This is slightly less optimal than setting the component values directly by named methods. The value given should be a float in the range 0..1.

◆ setChannelVal()

setChannelVal ( int  x,
int  y,
int  channel,
Xelval  value 
)

Sets the nth component color at the indicated pixel.

The channel index should be in the range 0..(get_num_channels()-1). The channels are ordered B, G, R, A. This is slightly less optimal than setting the component values directly by named methods. The value given should be in the range 0..maxval.

◆ setColorSpace()

setColorSpace ( ColorSpace  color_space)

Converts the colors in the image to the indicated color space.

This may be a lossy operation, in particular when going from sRGB to linear. The alpha channel remains untouched.

Note that, because functions like get_xel() and set_xel() work on linearized floating-point values, this conversion won't affect those values (aside from some minor discrepancies due to storage precision). It does affect the values used by get_xel_val() and set_xel_val(), though, since those operate on encoded colors.

Some color spaces, particularly scRGB, may enforce the use of a particular maxval setting.

◆ setColorType()

setColorType ( PNMImageHeader::ColorType  color_type)

Translates the image to or from grayscale, color, or four-color mode.

Grayscale images are converted to full-color images with R, G, B set to the original gray level; color images are converted to grayscale according to the value of Bright(). The alpha channel, if added, is initialized to zero.

◆ setGray()

setGray ( int  x,
int  y,
float  gray 
)

Sets the gray component color at the indicated pixel.

This is only meaningful for grayscale images; for other image types, this simply sets the blue component color. However, also see set_xel(), which can set all the component colors to the same grayscale level, and hence works correctly both for grayscale and color images. The value given should be a linearized float in the range 0..1.

◆ setGrayVal()

setGrayVal ( int  x,
int  y,
Xelval  gray 
)

Sets the gray component color at the indicated pixel.

This is only meaningful for grayscale images; for other image types, this simply sets the blue component color. However, also see set_xel_val(), which can set all the component colors to the same grayscale level, and hence works correctly both for grayscale and color images. The value given should be in the range 0..maxval, encoded in the configured color space. See set_gray if you instead have a linearized normalized floating-point value.

◆ setGreen()

setGreen ( int  x,
int  y,
float  g 
)

Sets the green component color only at the indicated pixel.

The value given should be a linearized float in the range 0..1.

◆ setGreenVal()

setGreenVal ( int  x,
int  y,
Xelval  g 
)

Sets the green component color only at the indicated pixel.

The value given should be in the range 0..maxval, encoded in the configured color space. See set_green if you instead have a linearized and normalized floating-point value.

◆ setMaxval()

setMaxval ( Xelval  maxval)

Rescales the image to the indicated maxval.

◆ setNumChannels()

setNumChannels ( int  num_channels)

Changes the number of channels associated with the image.

The new number of channels must be an integer in the range 1 through 4, inclusive. This will allocate and/or deallocate memory as necessary to accommodate; see set_color_type().

◆ setPixel()

setPixel ( int  x,
int  y,
const PNMImageHeader::PixelSpec  pixel 
)

Sets the (r, g, b, a) pixel value at the indicated pixel, using a PixelSpec object.

◆ setReadSize()

setReadSize ( int  x_size,
int  y_size 
)

Specifies the size to we'd like to scale the image upon reading it.

This will affect the next call to read(). This is usually used to reduce the image size, e.g. for a thumbnail.

If the file type reader supports it (e.g. JPEG), then this will scale the image during the read operation, consequently reducing memory and CPU utilization. If the file type reader does not support it, this will load the image normally, and them perform a linear scale after it has been loaded.

◆ setRed()

setRed ( int  x,
int  y,
float  r 
)

Sets the red component color only at the indicated pixel.

The value given should be a linearized float in the range 0..1.

◆ setRedVal()

setRedVal ( int  x,
int  y,
Xelval  r 
)

Sets the red component color only at the indicated pixel.

The value given should be in the range 0..maxval, encoded in the configured color space. See set_red if you instead have a linearized and normalized floating-point value.

◆ setXel() [1/3]

setXel ( int  x,
int  y,
const LRGBColorf  value 
)

Changes the RGB color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ setXel() [2/3]

setXel ( int  x,
int  y,
float  gray 
)

Changes all three color components at the indicated pixel to the same value.

The value is a linearized float in the range 0..1.

◆ setXel() [3/3]

setXel ( int  x,
int  y,
float  r,
float  g,
float  b 
)

Changes the RGB color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ setXelA() [1/2]

setXelA ( int  x,
int  y,
const LColorf  value 
)

Changes the RGBA color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ setXelA() [2/2]

setXelA ( int  x,
int  y,
float  r,
float  g,
float  b,
float  a 
)

Changes the RGBA color at the indicated pixel.

Each component is a linearized float in the range 0..1.

◆ setXelVal() [1/3]

setXelVal ( int  x,
int  y,
const Xel  value 
)

Changes the RGB color at the indicated pixel.

Each component is in the range 0..maxval, encoded in the configured color space. See set_xel if you instead have a linearized and normalized floating-point value.

◆ setXelVal() [2/3]

setXelVal ( int  x,
int  y,
Xelval  gray 
)

Changes all three color components at the indicated pixel to the same value.

The value is in the range component is in the range 0..maxval, encoded in the configured color space. See set_xel if you instead have a linearized and normalized floating-point value.

◆ setXelVal() [3/3]

setXelVal ( int  x,
int  y,
Xelval  r,
Xelval  g,
Xelval  b 
)

Changes the RGB color at the indicated pixel.

Each component is in the range 0..maxval, encoded in the configured color space. See set_xel if you instead have a linearized and normalized floating-point value.

◆ takeFrom()

takeFrom ( PNMImage  orig)

Move the contents of the other image into this one, and empty the other image.

◆ threshold()

threshold ( const PNMImage  select_image,
int  channel,
float  threshold,
const PNMImage  lt,
const PNMImage  ge 
)

Selectively copies each pixel from either one source or another source, depending on the pixel value of the indicated channel of select_image.

For each pixel (x, y):

s = select_image.get_channel(x, y, channel). Set this image's (x, y) to:

lt.get_xel(x, y) if s < threshold, or

ge.get_xel(x, y) if s >= threshold

Any of select_image, lt, or ge may be the same PNMImge object as this image, or the same as each other; or they may all be different. All images must be the same size. As a special case, lt and ge may both be 1x1 images instead of the source image size.

◆ toAlphaVal()

Xelval toAlphaVal ( float  input_value)

A handy function to scale alpha values from [0..1] to [0..get_maxval()].

◆ toVal()

Xelval toVal ( float  input_value)

A handy function to scale non-alpha values from [0..1] to [0..get_maxval()].

Do not use this for alpha values, see to_alpha_val.

◆ unfilteredStretchFrom()

unfilteredStretchFrom ( const PNMImage  copy)

Resizes from the indicated image into this one by performing a nearest- point sample.

◆ unpremultiplyAlpha()

unpremultiplyAlpha ( )

Converts an image in-place to its "straight alpha" form (presumably from a "premultiplied" form), where, for every pixel in the image, the red, green, and blue components are divided by that pixel's alpha value.

This does not modify any alpha values.

◆ write() [1/3]

bool write ( const Filename  filename,
PNMFileType  type 
)

Writes the image to the indicated filename.

If type is non-NULL, it is a suggestion for the type of image file to write.

◆ write() [2/3]

bool write ( PNMWriter  writer)

This flavor of write() uses an already-existing PNMWriter to write the image file.

You can get a writer via the PNMImageHeader::make_writer() methods.

The PNMWriter is always deleted upon completion, whether successful or not.

◆ write() [3/3]

bool write ( Ostream  data,
str  filename,
PNMFileType  type 
)

Writes the image to the indicated ostream.

The filename is advisory only, and may be used suggest a type if it has a known extension.

If type is non-NULL, it is a suggestion for the type of image file to write.