#include <c4d_basebitmap.h>
The bitmap class can be used to load, read, draw and save bitmap pictures of various formats.
Bitmaps are organized so that the 2D point [0,0] is the top left corner. Be sure to call Init() before you attempt to use a newly allocated bitmap.
- Note
- Has to be created with Alloc() and destroyed with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.
- Warning
- Though BaseBitmap can work with other bit depths than 24 and 32, note that only these function support other bit depths:
GetBw(), GetBh(), GetBt(), GetBpz(), Init(), GetLine(), SetLine(), GetPixelCnt(), SetPixelCnt(), SetCMAP(),
AddChannel(), RemoveChannel(), GetAlphaPixel(), SetAlphaPixel(), GetInternalChannel(), GetChannelCount(), GetChannelNum()
To use higher bit depths or multiple channels, see MultipassBitmap.
|
static IMAGERESULT | Init (BaseBitmap *&res, const Filename &name, Int32 frame=-1, Bool *ismovie=nullptr, BitmapLoaderPlugin **loaderplugin=nullptr, const maxon::Delegate< void(Float progress)> &progressCallback=nullptr) |
|
IMAGERESULT | Init (const Filename &name, Int32 frame=-1, Bool *ismovie=nullptr) |
|
IMAGERESULT | Init (Int32 x, Int32 y, Int32 depth=24, INITBITMAPFLAGS flags=INITBITMAPFLAGS::NONE) |
|
|
void | ScaleIt (BaseBitmap *dst, Int32 intens, Bool sample, Bool nprop) const |
|
void | ScaleBicubic (BaseBitmap *dst, Int32 src_xmin, Int32 src_ymin, Int32 src_xmax, Int32 src_ymax, Int32 dst_xmin, Int32 dst_ymin, Int32 dst_xmax, Int32 dst_ymax) const |
|
|
void | SetPen (Int32 r, Int32 g, Int32 b) |
|
void | Clear (Int32 r, Int32 g, Int32 b) |
|
void | Clear (Int32 x1, Int32 y1, Int32 x2, Int32 y2, Int32 r, Int32 g, Int32 b) |
|
void | Line (Int32 x1, Int32 y1, Int32 x2, Int32 y2) |
|
void | Arc (Int32 x, Int32 y, Float radius, Float angle_start, Float angle_end, Int32 subdiv=32) |
|
|
void | GetPixel (Int32 x, Int32 y, UInt16 *r, UInt16 *g, UInt16 *b) const |
|
Bool | SetPixel (Int32 x, Int32 y, Int32 r, Int32 g, Int32 b) |
|
void | GetAlphaPixel (BaseBitmap *channel, Int32 x, Int32 y, UInt16 *val) const |
|
Bool | SetAlphaPixel (BaseBitmap *channel, Int32 x, Int32 y, Int32 val) |
|
void | GetPixelCnt (Int32 x, Int32 y, Int32 cnt, UChar *buffer, Int32 inc, COLORMODE dstmode, PIXELCNT flags, ColorProfileConvert *conversion=nullptr) const |
|
Bool | SetPixelCnt (Int32 x, Int32 y, Int32 cnt, UChar *buffer, Int32 inc, COLORMODE srcmode, PIXELCNT flags) |
|
◆ BaseBitmap()
◆ ~BaseBitmap()
◆ Alloc()
Allocates a bitmap. Destroy the allocated bitmap with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.
- Returns
- The allocated bitmap, or nullptr if the allocation failed.
◆ Free()
Destructs bitmaps allocated with Alloc(). Use AutoAlloc to automate the allocation and destruction based on scope.
- Parameters
-
[in,out] | bm | The bitmap to destruct. If the pointer is nullptr nothing happens. The pointer is assigned nullptr afterwards. |
◆ Init() [1/3]
Loads a bitmap file. The format is automatically detected.
- Note
- The bitmap class only supports up to 4 channels. Also, most image loaders will only load one alpha channel.
- Parameters
-
[out] | res | Assigned a pointer to a bitmap. The caller owns the pointed bitmap. |
[in] | name | A valid filename that can either refer a movie or a picture. |
[in] | frame | The frame number to load in a movie. |
[in] | ismovie | If not nullptr this pointer is assigned true if the loaded picture is a movie, otherwise false. |
[in] | loaderplugin | If not nullptr this pointer is assigned a bitmap loader plugin instance of the same type as the loaded bitmap. The caller owns the pointed bitmap loader. |
[in] | progressCallback | Callback which is triggered if the loader supports progress reporting. Since R19. |
- Returns
- The image result: IMAGERESULT
◆ Init() [2/3]
Loads a file into the bitmap. The file format is automatically detected.
- Warning
- Any previous data in the bitmap object is lost.
- Note
- The bitmap class only supports up to 4 channels. Also, most image loaders will only load one alpha channel.
- Parameters
-
[in] | name | A valid filename that can either refer a movie or a picture. |
[in] | frame | The frame number to load in a movie. |
[in] | ismovie | If not nullptr this pointer is assigned true if the loaded picture is a movie, otherwise false. |
- Returns
- The image result: IMAGERESULT
◆ Init() [3/3]
Initializes the bitmap to the given [x,y] dimensions and depth.
- Warning
- Any previous data in the bitmap object is lost.
- Parameters
-
[in] | x | The requested width in pixels (Maximum 16 000 pixels). |
[in] | y | The requested height in pixels (Max. 16000 pixels). |
[in] | depth | The requested bit depth. The possible values are (1, 4, 8, 16, 24, 32, 64, 96). On some platforms 32-bit will be used even if 24 is requested, to allow for padding. In this case GetBt() will return 32. |
[in] | flags | The initialization flags: INITBITMAPFLAGS |
- Returns
- The image result: IMAGERESULT
◆ FlushAll()
Resets the bitmap to its initial state and frees allocated memory. Requires a call to Init() before the bitmap can be used again.
◆ Save()
Saves the bitmap to a file.
- Parameters
-
[in] | name | A valid filename that can either refer a movie or a picture. |
[in] | format | The image format: FILTER |
[in] | data | The additional settings for some formats. MISCSAVER
Can be nullptr, which means the same as an empty container. The caller owns the pointed container. |
[in] | savebits | A combination of the following flags: SAVEBIT |
- Returns
- The image result: IMAGERESULT
◆ GetClone()
Copies the bitmap.
- Warning
- Do not use GetClone() in a NodeData::CopyTo method. This will cause memory leaks. Use CopyTo() instead.
- Returns
- The cloned bitmap, or nullptr if an error occured. The caller owns the pointed bitmap.
◆ GetClonePart()
Copies a part of the bitmap, specified by the rectangle [x,y] to [x+w,y+h].
- Parameters
-
[in] | x | The upper left X coordinate of the rectangle. |
[in] | y | The upper left Y coordinate of the rectangle. |
[in] | w | The width of the rectangle. |
[in] | h | The height of the rectangle. |
- Returns
- The cloned part of the bitmap, or nullptr if an error occured. The caller owns the pointed bitmap.
◆ CopyTo()
Copies the bitmap from *this
to *dst.
- Parameters
-
[out] | dst | The bitmap to copy this bitmap to. The caller owns the pointed bitmap. |
- Returns
- true if the bitmap was successfully copied, otherwise false.
◆ CopyPartTo()
Copies a part of the bitmap from *this
to *dst.
- Parameters
-
[out] | dst | The bitmap to copy this bitmap to. The caller owns the pointed bitmap. |
[in] | x | The X position of the part to be copied from *this . |
[in] | y | The Y position of the part to be copied from *this . |
[in] | w | The width of the part to be copied. |
[in] | h | The height of the part to be copied. |
- Returns
- true if the bitmap part was successfully copied, otherwise false.
◆ GetBw()
Int32 GetBw |
( |
void |
| ) |
const |
Gets the width of the bitmap in pixels. If the bitmap has not been initialized the return value is 0.
- Note
- Calling this method is the only way to see if a bitmap passed by Cinema 4D or some other source has been initialized.
- Returns
- The bitmap width in pixels, or 0 if the bitmap is not initialized.
◆ GetBh()
Int32 GetBh |
( |
void |
| ) |
const |
Gets the height of the bitmap in pixels.
- Returns
- The bitmap height in pixels.
◆ GetBt()
Int32 GetBt |
( |
void |
| ) |
const |
Gets the number of bits per pixel.
- Returns
- The number of bits per pixel.
◆ GetBpz()
Int32 GetBpz |
( |
void |
| ) |
const |
Gets the number of bytes per line.
- Returns
- The number of bytes per line.
◆ GetColorMode()
Gets the color mode of the bitmap.
- Returns
- The color mode: COLORMODE
◆ ScaleIt()
Scales the bitmap to fit in the destination bitmap and copies it there.
The destination bitmap dst needs to be initialized with the destination size before calling this function.
- Parameters
-
[out] | dst | The destination bitmap. The caller owns the pointed bitmap. |
[in] | intens | Lets you change brightness of the image (128 = 50% brightness, 256 = unchanged). |
[in] | sample | If true a better scaling algorithm is used, which results in a better quality but a bit slower. |
[in] | nprop | Must be true if non-proportional scaling is wanted. |
◆ ScaleBicubic()
Scales the bitmap rectangle [src_xmin,src_ymin,src_xmax,src_ymax] to fit in the destination bitmap rectangle [dst_xmin,dst_ymin,dst_xmax,dst_ymax] and copies it there.
The scaling, if necessary, is done using Bicubic interpolation.
The destination bitmap dst needs to be initialized before calling this function.
- Note
- This function can currently only scale down, i.e. the destination needs to be smaller to the source in size.
- Parameters
-
[out] | dst | The destination bitmap. The caller owns the pointed bitmap. |
[in] | src_xmin | The source top left X coordinate. |
[in] | src_ymin | The source top left Y coordinate. |
[in] | src_xmax | The source bottom right X coordinate. |
[in] | src_ymax | The source bottom right Y coordinate. |
[in] | dst_xmin | The destination top left X coordinate. |
[in] | dst_ymin | The destination top left Y coordinate. |
[in] | dst_xmax | The destination bottom right X coordinate. |
[in] | dst_ymax | The destination bottom right Y coordinate. |
◆ SetPen()
Sets the color for the following drawing operations.
The range of the parameters is 0 to 255, where (255,255,255) is white, regardless of the bit depth of the image.
- Note
- This method only works with bit depth 24 and 32.
- Parameters
-
[in] | r | The red component. |
[in] | g | The green component. |
[in] | b | The blue component. |
◆ Clear() [1/2]
Sets all pixels in the bitmap to the color specified by (r,g,b).
The range of the parameters is 0 to 255, where (255,255,255) is white, regardless of the bit depth of the image.
- Note
- This method only works with bit depth 24 and 32.
- Parameters
-
[in] | r | The red component. |
[in] | g | The green component. |
[in] | b | The blue component. |
◆ Clear() [2/2]
Sets all pixels within the rectangle specified by [x1,y1] and [x2,y2] to the color specified by (r,g,b).
The range of the parameters is 0 to 255, where (255,255,255) is white, regardless of the bit depth of the image.
- Note
- This method only works with bit depth 24 and 32.
- Parameters
-
[in] | x1 | The top left X coordinate of the rectangle. |
[in] | y1 | The top left Y coordinate of the rectangle. |
[in] | x2 | The bottom right X coordinate of the rectangle. |
[in] | y2 | The bottom right Y coordinate of the rectangle. |
[in] | r | The red component. |
[in] | g | The green component. |
[in] | b | The blue component. |
◆ Line()
Draws a line with the current pen color between (x1,y1) and (x2,y2).
- Note
- This method only works with bit depth 24 and 32.
- Parameters
-
[in] | x1 | The start X coordinate. |
[in] | y1 | The start Y coordinate. |
[in] | x2 | The end X coordinate. |
[in] | y2 | The end Y coordinate. |
◆ Arc()
Draws an arc (section of a circle) with the current pen color at [x,y].
- Parameters
-
[in] | x | The X coordinate. |
[in] | y | The Y coordinate. |
[in] | radius | The radius of the ellipse. |
[in] | angle_start | The start of the angle in radians. |
[in] | angle_end | The end of the angle in radians. |
[in] | subdiv | The range between angle_start and angle_end is divided into subdiv line segments. |
◆ GetPixel()
Gets the color at [x,y] and assigns it to the passed (r,g,b) parameters.
The range of the assigned r, g and b parameters is 0 to 255, where (255,255,255) is white, regardless of the bit depth of the image.
- Parameters
-
[in] | x | The X coordinate. |
[in] | y | The Y coordinate. |
[out] | r | Assigned the red component. |
[out] | g | Assigned the green component. |
[out] | b | Assigned the blue component. |
◆ SetPixel()
Sets the pixel at [x,y] to the color specified by (r,g,b) (0 <= r/g/b <= 255).
The range of the r, g and b parameters is 0 to 255, where (255,255,255) is white, regardless of the bit depth of the image.
- Parameters
-
[in] | x | The X coordinate. |
[in] | y | The Y coordinate. |
[in] | r | The red component. |
[in] | g | The green component. |
[in] | b | The blue component. |
- Returns
- true if the pixel was successfully set, otherwise false.
◆ GetAlphaPixel()
Gets the alpha value at [x,y] and assigns it to the passed parameter val (0 <= val <= 255).
- Parameters
-
[in] | channel | The alpha channel to use. |
[in] | x | The X coordinate. |
[in] | y | The Y coordinate. |
[out] | val | Assigned the alpha value. |
◆ SetAlphaPixel()
Sets the alpha value at [x,y] to val.
- Parameters
-
[in] | channel | The alpha channel to use. |
[in] | x | The X coordinate. |
[in] | y | The Y coordinate. |
[in] | val | The alpha value. 0 <= val <= 255 |
◆ GetPixelCnt()
Reads cnt pixels from [x,y] in the bitmap to the buffer with the color mode dstmode, incrementing inc bytes for each pixel.
- Parameters
-
[in] | x | The X coordinate of the first pixel to get. |
[in] | y | The Y coordinate of the first pixel to get. |
[in] | cnt | The number of pixels to get. |
[out] | buffer | A pointer to a large enough memory buffer where the pixel data will be written. The caller owns the pointed buffer. |
[in] | inc | The byte increment per pixel in the buffer. |
[in] | dstmode | The destination color mode: COLORMODE |
[in] | flags | The flags: PIXELCNT |
[in] | conversion | This should be normally set to nullptr. Pass a color profile only if a conversion is wanted before retrieving the pixel data.
This only works if either the bitmap is 32-bit per component (so no 8/16-bit images) or the dstmode is 32-bit per component.
The conversion is done before color reduction (e.g. if dstmode is 16-bit the profile is first applied and then the data resampled to 16-bit). |
◆ SetPixelCnt()
Sets cnt pixels at [x,y] in the bitmap from buffer with color mode srcmode, incrementing inc bytes for each pixel.
- Parameters
-
[in] | x | The X coordinate of the first pixel to set. |
[in] | y | The Y coordinate of the first pixel to set. |
[in] | cnt | The number of pixels to set. |
[in] | buffer | A pointer to a large enough memory buffer containing the pixels to set. The caller owns the pointed buffer. |
[in] | inc | The byte increment per pixel in the buffer. |
[in] | srcmode | The source color mode: COLORMODE |
- Warning
- None of the alpha modes are supported.
- Parameters
-
- Returns
- true if successful, otherwise false.
◆ AddChannel()
Adds a new alpha channel to the bitmap.
- Note
- The bitmap class only supports up to 4 channels.
- Parameters
-
[in] | internal | Should only be true for the first alpha. The internal alpha will be stored within a bitmaps if its format supports alphas. |
[in] | straight | Should be true if the bitmap has to be interpreted as straight.
For information about straight alphas please take a look at the corresponding option in the render settings and the manual of Cinema 4D. |
- Returns
- The newly added channel if successful, otherwise nullptr.
◆ RemoveChannel()
Removes the specified channel from the bitmap.
- Parameters
-
[in] | channel | The alpha channel to remove. |
◆ GetInternalChannel() [1/2]
const BaseBitmap* GetInternalChannel |
( |
void |
| ) |
const |
Gets the internal read-only alpha channel.
- Note
- The internal alpha channel is the one that is saved together with the picture, with those formats that support this.
- Returns
- The read-only internal alpha channel, or nullptr if no internal alpha is available. The bitmap owns the pointed channel.
◆ GetInternalChannel() [2/2]
Gets the internal alpha channel.
- Note
- The internal alpha channel is the one that is saved together with the picture, with those formats that support this.
- Returns
- The read-only internal alpha channel, or nullptr if no internal alpha is available. The bitmap owns the pointed channel.
◆ GetChannelCount()
Int32 GetChannelCount |
( |
void |
| ) |
const |
Gets the number of alpha channels in the bitmap, including the internal channel.
- Returns
- The number of alpha channels.
◆ GetChannelNum() [1/2]
Gets the read-only alpha channel specified by num.
- Parameters
-
- Returns
- The requested read-only channel.
◆ GetChannelNum() [2/2]
Gets the alpha channel specified by num.
- Parameters
-
- Returns
- The requested channel.
◆ GetData()
Gets bitmap data. Private.
- Parameters
-
[in] | id | The data ID to Get: BASEBITMAP_DATA |
[in] | t_default | The default data to use. |
- Returns
- The retrieved data.
◆ SetData()
Sets bitmap data. Private.
- Parameters
-
- Returns
- true if the data could be set, otherwise false.
◆ GetDirty()
Gets the incremented dirty count when the bitmap changes. Private.
- Returns
- The dirty count.
◆ SetDirty()
Makes the bitmap dirty. Private.
◆ GetUpdateRegionBitmap() [1/2]
Gets the updated region of a bitmap (read-only).
- Returns
- The updated region.
◆ GetUpdateRegionBitmap() [2/2]
Gets the updated region of a bitmap.
- Returns
- The updated region.
◆ SetColorProfile()
Sets the color profile for the bitmap.
- Parameters
-
[in] | profile | The new color profile. The caller owns the pointed color profile. |
- Returns
- true if the color profile was successfully set, otherwise false.
◆ GetColorProfile()
Gets the color profile of the bitmap.
- Returns
- The color profile of the bitmap, or nullptr if not available.
◆ GetMemoryInfo()
Int GetMemoryInfo |
( |
void |
| ) |
const |
Gets the size of the memory used by the bitmap.
- Returns
- The memory size of the bitmap.
◆ IsMultipassBitmap()
Bool IsMultipassBitmap |
( |
void |
| ) |
const |
◆ SetCMAP()
If the image in the bitmap has 8-bit indexed color, this function can be used to set the palette entries.
- Note
- All four parameters must be between 0 and 255.
- Parameters
-
[in] | i | The index. 0 <= i <= 255 |
[in] | r | The red component. 0 <= r <= 255 |
[in] | g | The green component. 0 <= g <= 255 |
[in] | b | The blue component. 0 <= b <= 255 |
◆ GetImageRef()
Bool GetImageRef |
( |
SAVEBIT |
saveBit, |
|
|
Bool |
alpha, |
|
|
maxon::ImageRef & |
imageRef |
|
) |
| const |
Gets the ImageRef for a BaseBitmap. The reference is stored internally. For the same saveBit / alpha pair you will get the same reference.
- Parameters
-
[in] | saveBit | A combination of the following flags: SAVEBIT |
[in] | alpha | True, if you need the alpha image, false otherwise. |
[out] | imageRef | A reference that gets the imageRef assigned. |
- Returns
- true if the function succeeded, otherwise false.