Panda3D
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
PNMImageHeader Class Reference

This is the base class of PNMImage, PNMReader, and PNMWriter. More...

#include "pnmImageHeader.h"

Inheritance diagram for PNMImageHeader:
PfmFile PNMImage PNMReader PNMWriter PNMFileTypePfm::Reader PNMFileTypePfm::Writer

Classes

class  Histogram
 
class  PixelSpec
 
class  PixelSpecCount
 

Public Types

enum  ColorType {
  CT_invalid = 0, CT_grayscale = 1, CT_two_channel = 2, CT_color = 3,
  CT_four_channel = 4
}
 
typedef pmap< PixelSpec, int > HistMap
 
typedef pvector< PixelSpecPalette
 
typedef pvector< PixelSpecCountPixelCount
 

Public Member Functions

 PNMImageHeader (const PNMImageHeader &copy)
 
ColorSpace get_color_space () const
 Returns the color space that the image is encoded in, or CS_unspecified if unknown. More...
 
ColorType get_color_type () const
 Returns the image type of the image, as an enumerated value. More...
 
string get_comment () const
 Gets the user comment from the file. More...
 
xelval get_maxval () const
 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 get_num_channels () const
 Returns the number of channels in the image. More...
 
PNMFileTypeget_type () const
 If the file type is known (e.g. More...
 
int get_x_size () const
 Returns the number of pixels in the X direction. More...
 
int get_y_size () const
 Returns the number of pixels in the Y direction. More...
 
bool has_alpha () const
 Returns true if the image includes an alpha channel, false otherwise. More...
 
bool has_type () const
 Returns true if the PNMImageHeader knows what type it is, false otherwise. More...
 
bool is_grayscale () const
 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...
 
PNMReadermake_reader (const Filename &filename, PNMFileType *type=NULL, bool report_unknown_type=true) const
 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...
 
PNMReadermake_reader (istream *file, bool owns_file=true, const Filename &filename=Filename(), string magic_number=string(), PNMFileType *type=NULL, bool report_unknown_type=true) const
 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...
 
PNMWritermake_writer (const Filename &filename, PNMFileType *type=NULL) const
 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...
 
PNMWritermake_writer (ostream *file, bool owns_file=true, const Filename &filename=Filename(), PNMFileType *type=NULL) const
 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...
 
void operator= (const PNMImageHeader &copy)
 
void output (ostream &out) const
 
bool read_header (const Filename &filename, PNMFileType *type=NULL, bool report_unknown_type=true)
 Opens up the image file and tries to read its header information to determine its size, number of channels, etc. More...
 
bool read_header (istream &data, const string &filename=string(), PNMFileType *type=NULL, bool report_unknown_type=true)
 Reads the image header information only from the indicated stream. More...
 
void set_comment (const string &comment)
 Writes a user comment string to the image (header). More...
 
void set_type (PNMFileType *type)
 Sets the file type of this PNMImage. More...
 

Static Public Member Functions

static bool has_alpha (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 is_grayscale (ColorType color_type)
 This static variant of is_grayscale() returns true if the indicated image type represents a grayscale image, false otherwise. More...
 
static bool read_magic_number (istream *file, string &magic_number, int num_bytes)
 Ensures that the first n bytes of the file are read into magic_number. More...
 

Detailed Description

This is the base class of PNMImage, PNMReader, and PNMWriter.

It encapsulates all the information associated with an image that describes its size, number of channels, etc; that is, all the information about the image except the image data itself. It's the sort of information you typically read from the image file's header.

Definition at line 43 of file pnmImageHeader.h.

Member Function Documentation

◆ get_color_space()

ColorSpace PNMImageHeader::get_color_space ( ) const
inline

Returns the color space that the image is encoded in, or CS_unspecified if unknown.

Definition at line 166 of file pnmImageHeader.I.

References get_x_size().

Referenced by get_maxval(), and GeoMipTerrain::set_heightfield().

◆ get_color_type()

PNMImageHeader::ColorType PNMImageHeader::get_color_type ( ) const
inline

Returns the image type of the image, as an enumerated value.

This is really just the number of channels cast to the enumerated type.

Definition at line 79 of file pnmImageHeader.I.

References get_num_channels().

Referenced by osxGraphicsPipe::create_cg_image(), has_alpha(), is_grayscale(), read_magic_number(), and PNMImage::set_color_type().

◆ get_comment()

string PNMImageHeader::get_comment ( ) const
inline

Gets the user comment from the file.

Definition at line 200 of file pnmImageHeader.I.

References set_comment().

Referenced by get_y_size().

◆ get_maxval()

xelval PNMImageHeader::get_maxval ( ) const
inline

◆ get_num_channels()

int PNMImageHeader::get_num_channels ( ) const
inline

◆ get_type()

PNMFileType * PNMImageHeader::get_type ( ) const
inline

If the file type is known (e.g.

has_type() returns true), returns its PNMFileType pointer; otherwise, returns NULL.

Definition at line 233 of file pnmImageHeader.I.

References set_type().

Referenced by Texture::consider_rescale(), Texture::ensure_loader_type(), PNMImage::expand_border(), has_type(), and PNMImage::read().

◆ get_x_size()

int PNMImageHeader::get_x_size ( ) const
inline

Returns the number of pixels in the X direction.

This is one more than the largest allowable X coordinate.

Definition at line 178 of file pnmImageHeader.I.

References get_y_size().

Referenced by PNMImage::alpha_fill_val(), PfmVizzer::calc_max_u_displacement(), PfmVizzer::calc_max_v_displacement(), Texture::consider_rescale(), PNMImage::copy_channel(), osxGraphicsPipe::create_cg_image(), PNMImage::do_fill_distance(), Texture::ensure_loader_type(), PNMImage::expand_border(), PfmVizzer::extrude(), PNMImage::fill_distance_inside(), PNMImage::fill_distance_outside(), PNMImage::fill_val(), STBasicTerrain::fill_vertices(), PfmFile::forward_distort(), PfmFile::gaussian_filter_from(), PNMImage::gaussian_filter_from(), HeightfieldTesselator::generate(), PfmVizzer::generate_vis_mesh(), PfmVizzer::generate_vis_points(), get_color_space(), HeightfieldTesselator::get_elevation(), Texture::get_ram_image_as(), PNMImage::get_read_x_size(), PNMTextGlyph::get_right(), PNMTextGlyph::get_width(), PfmFile::load(), PfmVizzer::make_displacement(), PNMImage::make_grayscale(), PNMTextGlyph::place(), PNMImage::premultiply_alpha(), PfmTrans::process_pfm(), PfmVizzer::project(), PfmFile::quick_filter_from(), PNMImage::quick_filter_from(), ImageFile::read(), PNMImage::remix_channels(), PNMImage::rescale(), PfmFile::reverse_distort(), PfmVizzer::set_aux_pfm(), PNMImage::set_color_type(), SourceTextureImage::set_header(), GeoMipTerrain::set_heightfield(), PNMImage::set_maxval(), x11GraphicsWindow::set_properties_now(), PNMImage::take_alpha_array(), PNMImage::threshold(), PNMImage::unfiltered_stretch_from(), PNMImage::unpremultiply_alpha(), ImageFile::write(), PNMImage::write(), PNMFileTypePfm::Writer::write_pfm(), TextureImage::write_scale_info(), and PfmFile::xform().

◆ get_y_size()

int PNMImageHeader::get_y_size ( ) const
inline

Returns the number of pixels in the Y direction.

This is one more than the largest allowable Y coordinate.

Definition at line 190 of file pnmImageHeader.I.

References get_comment().

Referenced by PNMImage::alpha_fill_val(), PfmVizzer::calc_max_u_displacement(), PfmVizzer::calc_max_v_displacement(), Texture::consider_rescale(), PNMImage::copy_channel(), osxGraphicsPipe::create_cg_image(), PNMImage::do_fill_distance(), Texture::ensure_loader_type(), PNMImage::expand_border(), PfmVizzer::extrude(), PNMImage::fill_distance_inside(), PNMImage::fill_distance_outside(), PNMImage::fill_val(), STBasicTerrain::fill_vertices(), PfmFile::forward_distort(), PfmFile::gaussian_filter_from(), PNMImage::gaussian_filter_from(), HeightfieldTesselator::generate(), PfmVizzer::generate_vis_mesh(), PfmVizzer::generate_vis_points(), PNMTextGlyph::get_bottom(), HeightfieldTesselator::get_elevation(), PNMTextGlyph::get_height(), Texture::get_ram_image_as(), PNMImage::get_read_y_size(), get_x_size(), PfmFile::load(), PfmVizzer::make_displacement(), PNMImage::make_grayscale(), PNMTextGlyph::place(), PNMImage::premultiply_alpha(), PfmTrans::process_pfm(), PfmVizzer::project(), PfmFile::quick_filter_from(), PNMImage::quick_filter_from(), ImageFile::read(), PNMImage::remix_channels(), PNMImage::rescale(), PfmFile::reverse_distort(), PfmVizzer::set_aux_pfm(), PNMImage::set_color_type(), SourceTextureImage::set_header(), GeoMipTerrain::set_heightfield(), PNMImage::set_maxval(), x11GraphicsWindow::set_properties_now(), PNMImage::take_alpha_array(), PNMImage::threshold(), PNMImage::unfiltered_stretch_from(), PNMImage::unpremultiply_alpha(), ImageFile::write(), PNMImage::write(), PNMFileTypePfm::Writer::write_pfm(), TextureImage::write_scale_info(), and PfmFile::xform().

◆ has_alpha() [1/2]

bool PNMImageHeader::has_alpha ( PNMImageHeader::ColorType  color_type)
inlinestatic

◆ has_alpha() [2/2]

bool PNMImageHeader::has_alpha ( ) const
inline

◆ has_type()

bool PNMImageHeader::has_type ( ) const
inline

Returns true if the PNMImageHeader knows what type it is, false otherwise.

Definition at line 221 of file pnmImageHeader.I.

References get_type().

Referenced by set_comment().

◆ is_grayscale() [1/2]

bool PNMImageHeader::is_grayscale ( PNMImageHeader::ColorType  color_type)
inlinestatic

This static variant of is_grayscale() returns true if the indicated image type represents a grayscale image, false otherwise.

Definition at line 103 of file pnmImageHeader.I.

References is_grayscale().

Referenced by GeoMipTerrain::get_border_stitching(), and Texture::get_ram_image_as().

◆ is_grayscale() [2/2]

bool PNMImageHeader::is_grayscale ( ) const
inline

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.

(The gray color is actually stored in the blue channel, and the red and green channels are ignored.)

Definition at line 117 of file pnmImageHeader.I.

References get_color_type(), and has_alpha().

Referenced by PNMImage::add_alpha(), PNMImage::apply_exponent(), get_num_channels(), is_grayscale(), PNMImage::make_grayscale(), PNMImage::remove_alpha(), PNMImage::set_color_type(), PNMImage::set_maxval(), and PNMImage::write().

◆ make_reader() [1/2]

PNMReader * PNMImageHeader::make_reader ( const Filename filename,
PNMFileType type = NULL,
bool  report_unknown_type = true 
) const

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.

The filename "-" always stands for standard input. If type is specified, it is a suggestion for the file type to use.

The PNMReader should be deleted when it is no longer needed.

Definition at line 89 of file pnmImageHeader.cxx.

References VirtualFileSystem::get_global_ptr(), and VirtualFileSystem::open_read_file().

Referenced by Texture::ensure_loader_type(), PNMImage::read(), and read_header().

◆ make_reader() [2/2]

PNMReader * PNMImageHeader::make_reader ( istream *  file,
bool  owns_file = true,
const Filename filename = Filename(),
string  magic_number = string(),
PNMFileType type = NULL,
bool  report_unknown_type = true 
) const

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.

owns_file should be set true if the PNMReader is to be considered the owner of the stream pointer (in which case the stream will be deleted on completion, whether successful or not), or false if it should not delete it.

The filename parameter is optional here, since the file has already been opened; it is only used to examine the extension and attempt to guess the file type.

If magic_number is nonempty, it is assumed to represent the first few bytes that have already been read from the file. Some file types may have difficulty if this is more than two bytes.

If type is non-NULL, it is a suggestion for the file type to use.

The PNMReader should be deleted when it is no longer needed.

Definition at line 155 of file pnmImageHeader.cxx.

References VirtualFileSystem::close_read_file(), PNMFileTypeRegistry::get_global_ptr(), VirtualFileSystem::get_global_ptr(), PNMFileTypeRegistry::get_type_from_extension(), PNMReader::is_valid(), PNMFileType::make_reader(), make_writer(), and read_magic_number().

◆ make_writer() [1/2]

PNMWriter * PNMImageHeader::make_writer ( const Filename filename,
PNMFileType type = NULL 
) const

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.

The filename "-" always stands for standard output. If type is specified, it is a suggestion for the file type to use.

The PNMWriter should be deleted when it is no longer needed.

Definition at line 270 of file pnmImageHeader.cxx.

References VirtualFileSystem::get_global_ptr(), and VirtualFileSystem::open_write_file().

Referenced by make_reader(), and PNMImage::write().

◆ make_writer() [2/2]

PNMWriter * PNMImageHeader::make_writer ( ostream *  file,
bool  owns_file = true,
const Filename filename = Filename(),
PNMFileType type = NULL 
) const

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.

owns_file should be set true if the PNMWriter is to be considered the owner of the stream pointer (in which case the stream will be deleted on completion, whether successful or not), or false if it should not delete it.

The filename parameter is optional here, since the file has already been opened; it is only used to examine the extension and attempt to guess the intended file type.

If type is non-NULL, it is a suggestion for the file type to use.

The PNMWriter should be deleted when it is no longer needed.

Definition at line 332 of file pnmImageHeader.cxx.

References PNMFileTypeRegistry::get_global_ptr(), PNMFileTypeRegistry::get_type_from_extension(), PNMWriter::is_valid(), PNMFileType::make_writer(), and read_magic_number().

◆ read_header() [1/2]

bool PNMImageHeader::read_header ( const Filename filename,
PNMFileType type = NULL,
bool  report_unknown_type = true 
)

Opens up the image file and tries to read its header information to determine its size, number of channels, etc.

If successful, updates the header information and returns true; otherwise, returns false.

Definition at line 34 of file pnmImageHeader.cxx.

References make_reader().

Referenced by SourceTextureImage::read_header(), and GeoMipTerrain::set_heightfield().

◆ read_header() [2/2]

bool PNMImageHeader::read_header ( istream &  data,
const string &  filename = string(),
PNMFileType type = NULL,
bool  report_unknown_type = true 
)

Reads the image header information only 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.

Definition at line 62 of file pnmImageHeader.cxx.

References make_reader().

◆ read_magic_number()

bool PNMImageHeader::read_magic_number ( istream *  file,
string &  magic_number,
int  num_bytes 
)
static

Ensures that the first n bytes of the file are read into magic_number.

If magic_number is initially nonempty, assumes these represent the first few bytes already extracted. Returns true if successful, false if an end of file or error occurred before num_bytes could be read.

Definition at line 397 of file pnmImageHeader.cxx.

References get_color_type().

Referenced by make_reader(), and make_writer().

◆ set_comment()

void PNMImageHeader::set_comment ( const string &  comment)
inline

Writes a user comment string to the image (header).

Definition at line 210 of file pnmImageHeader.I.

References has_type().

Referenced by get_comment(), and DisplayRegion::save_screenshot().

◆ set_type()

void PNMImageHeader::set_type ( PNMFileType type)
inline

Sets the file type of this PNMImage.

This will be the default type used when an image is read, if the type cannot be determined by magic number or inferred by extension, or the type used when the image is written, if the type cannot be inferred from the filename extension.

Definition at line 248 of file pnmImageHeader.I.

References PNMImageHeader::PixelSpec::operator[]().

Referenced by get_type(), and ImageFile::read().


The documentation for this class was generated from the following files: