neuray API Programmer's Manual

mi::neuraylib::IImage Class Reference

[Miscellaneous]

Description

This interface represents a pixel image file. It supports different pixel types, 2D and 3D image data, and mipmap levels. Its main usage is in textures, see the mi::neuraylib::ITexture class.

The image coordinate system has its origin in the lower left corner in the case of 2D image data.

Editing and copying an image

Note that editing an existing image has unusual semantics that differ from all other DB elements. Usually, when editing a database element, an identical copy of the database element is created (the existing one cannot be used because it might be needed for other transactions, other scopes, or in case the transaction is aborted). For images, this implies a copy of all the pixel data which is very expensive.

There are only two mutable methods on this interface, reset_file() and set_from_canvas(); all other methods are const. Both methods eventually replace the entire pixel data anyway. Therefore, when an image is edited, the pixel data is not copied, but replaced by a dummy image of size 1x1. This approach saves the unneeded, but expensive copy of the original pixel data. When afterwards one of two methods above is called, the image uses the correct pixel data again.

Note that this also affects the results from methods like resolution_x(), etc. (if you want to know the resolution of an existing image without changing it, you should access the image, not edit it). Furthermore, you might end up with the dummy image if you do not call reset_file() or set_from_canvas() (or if these methods fail).

Note that using the transaction's copy function has the same semantics when used on an image. Thus after copying it is necessary to use either reset_file() or set_from_canvas() on the copy.

Modification of the scene element

virtual Sint32 reset_file( const char* filename, const char* selector = 0) =0
Sets the image to a file identified by filename. More...
virtual Sint32 reset_reader( IReader* reader, const char* image_format, const char* selector = 0) =0
Sets the image to the data provided by a reader. More...
virtual Sint32 reset_reader( IArray* reader, const char* image_format, const char* selector = 0) =0
Sets the image to the frame/uv-tile data provided by an array of readers. More...
virtual bool  set_from_canvas( const ICanvas* canvas, const char* selector = 0) =0
Sets the image to the passed canvas (without sharing). More...
virtual bool  set_from_canvas( ICanvas* canvas, const char* selector = 0, bool shared = false) =0
Sets the image to the passed canvas (possibly sharing the pixel data). More...
virtual bool  set_from_canvas( const IArray* uvtiles, const char* selector = 0) =0
Sets the frames/uv-tiles of this image to the passed canvases (without sharing). More...
virtual bool  set_from_canvas( IArray* uvtiles, const char* selector = 0, bool shared = false) =0
Sets the frames/uv-tiles of this image based to the passed canvases (possibly sharing the pixel data). More...

Methods related to frames of animated textures

virtual Size get_frame_id( Size frame_number) const =0
Returns the frame ID for a given frame number. More...
virtual Size get_frame_number( Size frame_id) const =0
Returns the frame number for a give frame ID. More...
virtual Size get_length() const =0
Returns the number of frames of this image. Never zero.
virtual bool  is_animated() const =0
Indicates whether this image represents an animated texture. More...

Methods related to uvtiles

virtual Size get_frame_length( Size frame_id) const =0
Returns the number of uv-tiles for a given frame (or 0 if frame_id is out of bounds).
virtual Size get_uvtile_id( Size frame_id, Sint32 u, Sint32 v) const =0
Returns the uv-tile ID corresponding to u- and v-coordinates. More...
virtual Sint32 get_uvtile_uv( Size frame_id, Size uvtile_id, Sint32& u, Sint32& v) const =0
Returns the u- and v- coordinates corresponding to a uv-tile ID. More...
virtual void get_uvtile_uv_ranges( Size frame_id, Sint32& min_u, Sint32& min_v, Sint32& max_u, Sint32& max_v) const =0
Returns the ranges of u- and v-coordinates. More...
virtual bool  is_uvtile() const =0
Indicates whether this image represents a uvtile sequence. More...

Methods to query filenames, selector, and canvases

virtual const ICanvasget_canvas( Size frame_id, Size uvtile_id, Uint32 level) const =0
Returns a canvas with the pixel data of the image. More...
virtual const char* get_filename( Size frame_id, Size uvtile_id) const =0
Returns the resolved file name of a mipmap of the image. More...
virtual const char* get_original_filename() const =0
Returns the unresolved file as passed to reset_file(). More...
virtual const char* get_selector() const =0
Returns the selector (or NULL).

Properties of the canvases (convenience methods)

virtual Uint32 get_levels( Size frame_id, Size uvtile_id) const =0
Returns the number of levels in the mipmap pyramid. More...
virtual const char* get_type( Size frame_id, Size uvtile_id) const =0
Returns the pixel type of a mipmap. More...
virtual Uint32 resolution_x( Size frame_id, Size uvtile_id, Uint32 level) const =0
Returns the horizontal resolution of a canvas. More...
virtual Uint32 resolution_y( Size frame_id, Size uvtile_id, Uint32 level) const =0
Returns the vertical resolution of a canvas. More...
virtual Uint32 resolution_z( Size frame_id, Size uvtile_id, Uint32 level) const =0
Returns the number of layers of a canvas. More...

Member Functions

virtual const ICanvas* mi::​neuraylib::​IImage::get_canvas( Size frame_id, Size uvtile_id, Uint32 level) const [pure virtual]

Returns a canvas with the pixel data of the image. Note that it is not possible to manipulate the pixel data.

Parameters

frame_id
The frame ID of the canvas.
uvtile_id
The uv-tile ID of the canvas.
level
The desired mipmap level. Level 0 is the highest resolution.

Returns

A canvas pointing to the pixel data of the image, or NULL in case of failure, e.g., because of an invalid uv-tile ID.

virtual const char* mi::​neuraylib::​IImage::get_filename( Size frame_id, Size uvtile_id) const [pure virtual]

Returns the resolved file name of a mipmap of the image. The method returns NULL if there is no file associated with the mipmap, e.g., after default construction, calls to set_from_canvas(), or failures to resolve the file name passed to reset_file().

See also:

get_original_filename()

Parameters

frame_id
The frame ID of the mipmap.
uvtile_id
The uv-tile ID of the mipmap.
virtual Size mi::​neuraylib::​IImage::get_frame_id( Size frame_number) const [pure virtual]

Returns the frame ID for a given frame number.

Parameters

frame_number
The frame number of the frame.

Returns

The frame ID, or -1 if frame_number is not a valid frame number.

virtual Size mi::​neuraylib::​IImage::get_frame_length( Size frame_id) const [pure virtual]

Returns the number of uv-tiles for a given frame (or 0 if frame_id is out of bounds).

virtual Size mi::​neuraylib::​IImage::get_frame_number( Size frame_id) const [pure virtual]

Returns the frame number for a give frame ID. This function is strictly monotonically increasing. Frame numbers are not necessarily consecutive, there can be missing frame numbers.

Parameters

frame_id
The frame ID of the frame.

Returns

The frame number, or -1 if frame_id is out of bounds.

virtual Size mi::​neuraylib::​IImage::get_length() const [pure virtual]

Returns the number of frames of this image. Never zero.

virtual Uint32 mi::​neuraylib::​IImage::get_levels( Size frame_id, Size uvtile_id) const [pure virtual]

Returns the number of levels in the mipmap pyramid.

Parameters

frame_id
The frame ID of the mipmap.
uvtile_id
The uv-tile ID of the mipmap to get the number of levels for.

Returns

The number of levels, or -1 in case of an invalid frame ID or uv-tile ID.

virtual const char* mi::​neuraylib::​IImage::get_original_filename() const [pure virtual]

Returns the unresolved file as passed to reset_file(). The method returns NULL after default construction or calls to set_from_canvas().

See also:

get_filename()

virtual const char* mi::​neuraylib::​IImage::get_selector() const [pure virtual]

Returns the selector (or NULL).

virtual const char* mi::​neuraylib::​IImage::get_type( Size frame_id, Size uvtile_id) const [pure virtual]

Returns the pixel type of a mipmap.

See Types for a list of supported pixel types.

Parameters

frame_id
The frame ID of the mipmap.
uvtile_id
The uv-tile ID of the mipmap to get the pixel type for.

Returns

The pixel type, or NULL in case of an invalid frame ID or uv-tile ID.

virtual Size mi::​neuraylib::​IImage::get_uvtile_id( Size frame_id, Sint32 u, Sint32 v) const [pure virtual]

Returns the uv-tile ID corresponding to u- and v-coordinates.

Parameters

frame_id
The frame ID of the frame.
u
The u-coordinate of the uv-tile.
v
The v-coordinate of the uv-tile..

Returns

The uv-tile ID, or -1 of there is no uv-tile with the given coordinates.

virtual Sint32 mi::​neuraylib::​IImage::get_uvtile_uv( Size frame_id, Size uvtile_id, Sint32& u, Sint32& v) const [pure virtual]

Returns the u- and v- coordinates corresponding to a uv-tile ID.

Parameters

frame_id
The frame ID of the frame.
uvtile_id
The uv-tile ID of the uv-tile.
u
The u-coordinate of the uv-tile.
v
The v-coordinate of the uv-tile.

Returns

0 on success, -1 if uvtile_id is out of range.

virtual void mi::​neuraylib::​IImage::get_uvtile_uv_ranges( Size frame_id, Sint32& min_u, Sint32& min_v, Sint32& max_u, Sint32& max_v) const [pure virtual]

Returns the ranges of u- and v-coordinates.

Parameters

frame_id
The frame ID of the frame.
min_u
Smallest u-coordinate for that frame.
min_v
Smallest v-coordinate for that frame.
max_u
Largest u-coordinate for that frame.
max_v
Largest v-coordinate for that frame.
virtual bool mi::​neuraylib::​IImage::is_animated() const [pure virtual]

Indicates whether this image represents an animated texture. The return value false implies that there is a single frame with frame number 0.

virtual bool mi::​neuraylib::​IImage::is_uvtile() const [pure virtual]

Indicates whether this image represents a uvtile sequence. The return value false implies that there is a single uv-tile (per frame) with u- and v- coordinates of 0.

virtual Sint32 mi::​neuraylib::​IImage::reset_file( const char* filename, const char* selector = 0) [pure virtual]

Sets the image to a file identified by filename. Note that support for a given image format requires an image plugin capable of handling that format.

The filename can include one of the following three uv-tileset markers in the filename: <UDIM>, <UVTILE0>, or <UVTILE1>. The image refers then to a whole uv-tileset, a set of images used together as a single large two-dimensional image. The different markers indicate the different filename conventions that encode where each image file is placed in the uv texture space.

Marker

Pattern

(0,0) index

Convention to format a (u, v)-index

<UDIM>

DDDD

1001

UDIM, expands to the four digit number 1000+(u+1+v*10)

<UVTILE0>

"_u"I"_v"I

_u0_v0

0-based uv-tileset, expands to "_u"u"_v"v"

<UVTILE1>

"_u"I"_v"I

_u1_v1

1-based uv-tileset, expands to "_u"(u+1)"_v"(v+1)"

The filename can also include a sequence marker for the frame number of animated textures: <#...> (with a non-zero count of '#' characters). The marker matches any non-negative integral number of at most as many digits as there are '#' characters in the sequence marker. The number may have leading zeros, which are ignored for its numerical interpretation. Multiple occurrences of the same number is undefined behavior (can happen in case of leading zeros).

Images without sequences marker are treated as a single frame with frame number 0. Images without uv-tileset marker are treated as a single uv-tile (per frame) with u- and v-coordinates of 0.

See also:

mi::neuraylib::IMdl_factory::create_texture() for a way to create a texture based on an MDL file path instead of a filename.

Parameters

filename
The filename of the image to load.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details.

Returns

  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -3: No image plugin found to handle the file.
  • -4: Failure to resolve the given filename, e.g., the file does not exist.
  • -5: Failure to open the resolved file.
  • -7: The image plugin failed to import the file.
  • -10: Failure to apply the given selector.

virtual Sint32 mi::​neuraylib::​IImage::reset_reader( IReader* reader, const char* image_format, const char* selector = 0) [pure virtual]

Sets the image to the data provided by a reader.

Parameters

reader
The reader that provides the data for the image. The reader needs to support absolute access.
image_format
The image format of the data, e.g., "jpg". Note that support for a given image format requires an image plugin capable of handling that format.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details.

Returns

  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -3: No image plugin found to handle the file.
  • -6: The reader does not support absolute access.
  • -7: The image plugin failed to import the data.
  • -10: Failure to apply the given selector.

virtual Sint32 mi::​neuraylib::​IImage::reset_reader( IArray* reader, const char* image_format, const char* selector = 0) [pure virtual]

Sets the image to the frame/uv-tile data provided by an array of readers.

Parameters

reader
A static or dynamic array of structures of type Uvtile_reader. Such a structure has the following members:
  • mi::Sint32 u The u-coordinate of this uv-tile.
  • mi::Sint32 v The v-coordinate of this uv-tile.
  • mi::Size frame The frame number of this uv-tile.
  • mi::neuraylib::IReader* reader The reader that provides the data for this uv-tile. The reader needs to support absolute access.
image_format
The image format of the data, e.g., "jpg". Note that support for a given image format requires an image plugin capable of handling that format.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details.

Returns

  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -3: No image plugin found to handle the file.
  • -6: The reader does not support absolute access.
  • -7: The image plugin failed to import the data.
  • -10: Failure to apply the given selector.
  • -11: Invalid reader array (empty, wrong element type, or invalid array slots or struct fields).
  • -12: Repeated u/v coordinates (per frame).

virtual Uint32 mi::​neuraylib::​IImage::resolution_x( Size frame_id, Size uvtile_id, Uint32 level) const [pure virtual]

Returns the horizontal resolution of a canvas.

Parameters

frame_id
The frame ID of the canvas.
uvtile_id
The uv-tile ID of the canvas to get the resolution for.
level
The desired mipmap level. Level 0 is the highest resolution.

Returns

The horizontal resolution, or -1 in case of an invalid frame ID, uv-tile ID, or level.

virtual Uint32 mi::​neuraylib::​IImage::resolution_y( Size frame_id, Size uvtile_id, Uint32 level) const [pure virtual]

Returns the vertical resolution of a canvas.

Parameters

frame_id
The frame ID of the canvas.
uvtile_id
The uv-tile ID of the canvas to get the resolution for.
level
The desired mipmap level. Level 0 is the highest resolution.

Returns

The vertical resolution, or -1 in case of an invalid frame ID, uv-tile ID, or level.

virtual Uint32 mi::​neuraylib::​IImage::resolution_z( Size frame_id, Size uvtile_id, Uint32 level) const [pure virtual]

Returns the number of layers of a canvas.

Parameters

frame_id
The frame ID of the canvas.
uvtile_id
The uv-tile ID of the canvas to get the resolution for.
level
The desired mipmap level. Level 0 is the highest resolution.

Returns

The number of layers, or -1 in case of an invalid frame ID, uv-tile ID, or level.

virtual bool mi::​neuraylib::​IImage::set_from_canvas( const ICanvas* canvas, const char* selector = 0) [pure virtual]

Sets the image to the passed canvas (without sharing).

Parameters

canvas
The pixel data to be used by this image. Note that the pixel data is copied, not shared. If sharing is intended, use mi::neuraylib::IImage::set_from_canvas( mi::neuraylib::ICanvas*, const char*, bool) instead.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details. Note that the selector is not applied to the canvas, the information is just stored for retrieval via get_selector().

Returns

true if the pixel data of this image has been set correctly, and false otherwise.

virtual bool mi::​neuraylib::​IImage::set_from_canvas( ICanvas* canvas, const char* selector = 0, bool shared = false) [pure virtual]

Sets the image to the passed canvas (possibly sharing the pixel data).

Parameters

canvas
The pixel data to be used by this image.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details. Note that the selector is not applied to the canvas, the information is just stored for retrieval via get_selector().
shared
If false (the default), the pixel data is copied from canvas and the method does the same as mi::neuraylib::IImage::set_from_canvas( const mi::neuraylib::ICanvas*, const char*). If set to true, the image uses the canvas directly (doing reference counting on the canvas pointer). You must not modify the canvas content after this call.

Returns

true if the pixel data of this image has been set correctly, and false otherwise.

virtual bool mi::​neuraylib::​IImage::set_from_canvas( const IArray* uvtiles, const char* selector = 0) [pure virtual]

Sets the frames/uv-tiles of this image to the passed canvases (without sharing).

Parameters

uvtiles
A static or dynamic array of structures of type Uvtile. Such a structure has the following members:
  • mi::Sint32 u The u-coordinate of this uv-tile.
  • mi::Sint32 v The v-coordinate of this uv-tile.
  • mi::Size frame The frame number of this uv-tile.
  • mi::neuraylib::ICanvas* canvas The pixel data to be used for this image. Note that the pixel data is copied, not shared. If sharing is intended, use mi::neuraylib::IImage::set_from_canvas(mi::IArray*,const char*,bool) instead.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details. Note that the selector is not applied to the canvas, the information is just stored for retrieval via get_selector().

Returns

true if the pixel data of this image has been set correctly, and false otherwise.

virtual bool mi::​neuraylib::​IImage::set_from_canvas( IArray* uvtiles, const char* selector = 0, bool shared = false) [pure virtual]

Sets the frames/uv-tiles of this image based to the passed canvases (possibly sharing the pixel data).

Parameters

uvtiles
A static or dynamic array of structures of type Uvtile. Such a structure has the following members:
  • mi::Sint32 u The u-coordinate of this uv-tile.
  • mi::Sint32 v The v-coordinate of this uv-tile.
  • mi::Size frame The frame number of this uv-tile.
  • mi::neuraylib::ICanvas* canvas The pixel data to be used for this image.
selector
The selector, or NULL. See section 2.3.1 in [MDLLS] for details. Note that the selector is not applied to the canvas, the information is just stored for retrieval via get_selector().
shared
If false (the default), the pixel data is copied from canvas and the method does the same as mi::neuraylib::IImage::set_from_canvas( const mi::neuraylib::ICanvas*, const char*). If set to true, the image uses the canvases directly (doing reference counting on the canvas pointers). You must not modify the canvas contents after this call.

Returns

true if the pixel data of this image has been set correctly, and false otherwise.