Panda3D

Loading...
Searching...
No Matches
Public Member Functions | List of all members
PNMReader Class Reference

This is an abstract base class that defines the interface for reading image files of various types. More...

`#include "pnmReader.h"`

Inheritance diagram for PNMReader:

## Public Member Functions
PNMFileType * | get_type () const
| Returns a pointer to the PNMFileType object that created this PNMReader.
virtual bool | is_floating_point ()
| Returns true if this PNMFileType represents a floating-point image type, false if it is a normal, integer type.
bool | is_valid () const
| Returns true if the PNMReader can be used to read data, false if something is wrong.
virtual void | prepare_read ()
| This method will be called before read_data() or read_row() is called.
virtual int | read_data (xel *array, xelval *alpha)
| Reads in an entire image all at once, storing it in the pre-allocated _x_size * _y_size array and alpha pointers.
virtual bool | read_pfm (PfmFile &pfm)
| Reads floating-point data directly into the indicated PfmFile.
virtual bool | read_row (xel *array, xelval *alpha, int x_size, int y_size)
| If supports_read_row(), above, returns true, this function may be called repeatedly to read the image, one horizontal row at a time, beginning from the top.
void | set_read_size (int x_size, int y_size)
| Instructs the reader to attempt to scale the image to the indicated size while reading it.
virtual bool | supports_read_row () const
| Returns true if this particular PNMReader is capable of returning the data one row at a time, via repeated calls to read_row().
virtual bool | supports_stream_read () const
| Returns true if this particular PNMReader can read from a general stream (including pipes, etc.), or false if the reader must occasionally fseek() on its input stream, and thus only disk streams are supported.
Public Member Functions inherited from PNMImageHeader
| PNMImageHeader (const PNMImageHeader &copy)
ColorSpace | get_color_space () const
ColorType | get_color_type () const
| Returns the image type of the image, as an enumerated value.
std::string | get_comment () const
xelval | get_maxval () const
int | get_num_channels () const
LVecBase2i | get_size () const
PNMFileType * | get_type () const
int | get_x_size () const
| Returns the number of pixels in the X direction.
int | get_y_size () const
| Returns the number of pixels in the Y direction.
bool | has_alpha () const
| Returns true if the image includes an alpha channel, false otherwise.
bool | has_type () const
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.
PNMReader * | make_reader (const Filename &filename, PNMFileType *type=nullptr, 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.
PNMReader * | make_reader (std::istream *file, bool owns_file=true, const Filename &filename=Filename(), std::string magic_number=std::string(), PNMFileType *type=nullptr, 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.
PNMWriter * | make_writer (const Filename &filename, PNMFileType *type=nullptr) 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.
PNMWriter * | make_writer (std::ostream *file, bool owns_file=true, const Filename &filename=Filename(), PNMFileType *type=nullptr) 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.
void | operator= (const PNMImageHeader &copy)
void | output (std::ostream &out) const
bool | read_header (const Filename &filename, PNMFileType *type=nullptr, 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.
bool | read_header (std::istream &data, const std::string &filename=std::string(), PNMFileType *type=nullptr, bool report_unknown_type=true)
| Reads the image header information only from the indicated stream.
void | set_comment (const std::string &comment)
void | set_type (PNMFileType *type)
| Sets the file type of this PNMImage.

## 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 }
typedef pmap< PixelSpec, int > | HistMap
typedef pvector< PixelSpec > | Palette
typedef pvector< PixelSpecCount > | PixelCount
Static Public Member Functions inherited from PNMImageHeader
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.
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.
static bool | read_magic_number (std::istream *file, std::string &magic_number, int num_bytes)
| Ensures that the first n bytes of the file are read into magic_number.
Public Attributes inherited from PNMImageHeader
| get_color_space
| Returns the color space that the image is encoded in, or CS_unspecified if unknown.
| get_comment
| Gets the user comment from the file.
| get_maxval
| Returns the maximum channel value allowable for any pixel in this image; for instance, 255 for a typical 8-bit-per-channel image.
| get_num_channels
| Returns the number of channels in the image.
| get_size
| Returns the number of pixels in each direction.
| get_type
| If the file type is known (e.g.
| has_type
| Returns true if the PNMImageHeader knows what type it is, false otherwise.
| set_comment
| Writes a user comment string to the image (header).

## Detailed Description

This is an abstract base class that defines the interface for reading image files of various types.

Any particular image file type that can be read must define a class that inherits from PNMReader to read it.

Definition at line 27 of file pnmReader.h.

## Constructor & Destructor Documentation

## ◆ ~PNMReader()

PNMReader::~PNMReader | ( |  | ) |
| virtual

Definition at line 21 of file pnmReader.cxx.

## Member Function Documentation

## ◆ get_type()

PNMFileType * PNMReader::get_type | ( |  | ) | const
| inline

Returns a pointer to the PNMFileType object that created this PNMReader.

Definition at line 43 of file pnmReader.I.

## ◆ is_floating_point()

bool PNMReader::is_floating_point | ( |  | ) |
| virtual

Returns true if this PNMFileType represents a floating-point image type, false if it is a normal, integer type.

If this returns true, read_pfm() is implemented instead of read_data().

Reimplemented in PNMFileTypePfm::Reader.

Definition at line 70 of file pnmReader.cxx.

Referenced by PfmFile::read(), and PNMImage::read().

## ◆ is_valid()

bool PNMReader::is_valid | ( |  | ) | const
| inline

Returns true if the PNMReader can be used to read data, false if something is wrong.

Definition at line 52 of file pnmReader.I.

Referenced by PNMImageHeader::make_reader(), PfmFile::read(), PNMImage::read(), read_data(), and PNMFileTypePfm::Reader::read_pfm().

## ◆ prepare_read()

void PNMReader::prepare_read | ( |  | ) |
| virtual

This method will be called before read_data() or read_row() is called.

It instructs the reader to initialize its data structures as necessary to actually perform the read operation.

After this call, _x_size and _y_size should reflect the actual size that will be filled by read_data() (as possibly modified by set_read_size()).

Definition at line 43 of file pnmReader.cxx.

References supports_read_row().

Referenced by PNMImage::read().

## ◆ read_data()

int PNMReader::read_data | ( | xel * | array,
|  | xelval * | alpha )
| virtual

Reads in an entire image all at once, storing it in the pre-allocated _x_size * _y_size array and alpha pointers.

(If the image type has no alpha channel, alpha is ignored.) Returns the number of rows correctly read.

Derived classes need not override this if they instead provide supports_read_row() and read_row(), below.

Definition at line 93 of file pnmReader.cxx.

References Thread::consider_yield(), PNMImageHeader::has_alpha(), is_valid(), and read_row().

Referenced by PNMImage::read().

## ◆ read_pfm()

bool PNMReader::read_pfm | ( | PfmFile & | pfm | ) |
| virtual

Reads floating-point data directly into the indicated PfmFile.

Returns true on success, false on failure.

Reimplemented in PNMFileTypePfm::Reader.

Definition at line 79 of file pnmReader.cxx.

Referenced by PfmFile::read(), and PNMImage::read().

## ◆ read_row()

bool PNMReader::read_row | ( | xel * | array,
|  | xelval * | alpha,
|  | int | x_size,
|  | int | y_size )
| virtual

If supports_read_row(), above, returns true, this function may be called repeatedly to read the image, one horizontal row at a time, beginning from the top.

Returns true if the row is successfully read, false if there is an error or end of file.

The x_size and y_size parameters are the value of _x_size and _y_size as originally filled in by the constructor; it is the actual number of pixels in the image. (The _x_size and _y_size members may have been automatically modified by the time this method is called if we are scaling on load, so should not be used.)

Definition at line 223 of file pnmReader.cxx.

Referenced by read_data().

## ◆ set_read_size()

void PNMReader::set_read_size | ( | int | x_size,
|  | int | y_size )
| inline

Instructs the reader to attempt to scale the image to the indicated size while reading it.

The reader may or may not follow this suggestion, or may follow it only partially (e.g. by reading a file which is slightly reduced in size, but not the precise size requested).

Definition at line 33 of file pnmReader.I.

Referenced by PNMImage::read().

## ◆ supports_read_row()

bool PNMReader::supports_read_row | ( |  | ) | const
| virtual

Returns true if this particular PNMReader is capable of returning the data one row at a time, via repeated calls to read_row().

Returns false if the only way to read from this file is all at once, via read_data().

Definition at line 206 of file pnmReader.cxx.

Referenced by prepare_read().

## ◆ supports_stream_read()

bool PNMReader::supports_stream_read | ( |  | ) | const
| virtual

Returns true if this particular PNMReader can read from a general stream (including pipes, etc.), or false if the reader must occasionally fseek() on its input stream, and thus only disk streams are supported.

Definition at line 234 of file pnmReader.cxx.

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

- panda/src/pnmimage/pnmReader.h
- panda/src/pnmimage/pnmReader.cxx
- panda/src/pnmimage/pnmReader.I