Banjo API 0.0.1
Multi-purpose C99 API
|
Matrix of pixels. More...
Typedefs | |
typedef int | bj_pixel[2] |
Represents a pixel position in a bitmap. | |
typedef struct bj_bitmap_t | bj_bitmap |
Typedef for the bj_bitmap struct. | |
Functions | |
bj_bitmap * | bj_bitmap_alloc (void) |
Allocate a new bitmap object. | |
bj_bitmap * | bj_bitmap_new (size_t width, size_t height, bj_pixel_mode mode, size_t stride) |
Creates a new bj_bitmap with the specified width and height. | |
void | bj_bitmap_del (bj_bitmap *p_bitmap) |
Deletes a bj_bitmap object and releases associated memory. | |
bj_bitmap * | bj_bitmap_new_from_file (const char *p_path, bj_error **p_error) |
Creates a new bitmap by loading from a file. | |
bj_bool | bj_bitmap_blit_stretched (const bj_bitmap *p_source, const bj_rect *p_source_area, bj_bitmap *p_destination, const bj_rect *p_destination_area) |
bj_bool bj_bitmap_blit_stretched | ( | const bj_bitmap * | p_source, |
const bj_rect * | p_source_area, | ||
bj_bitmap * | p_destination, | ||
const bj_rect * | p_destination_area ) |
Creates a new bj_bitmap with the specified width and height. Contrary to \ref bj_bitmap_new, the pixel data is explicitely provided by the caller through `p_pixels`. The caller is responsible for ensuring the allocated pixel data matches `width, `height`, `mode` and `stride`.
/ / You can use bj_compute_bitmap_stride with width
and mode
to / retrieve the most suitable value for stride
. / It's also possible to set stride
to 0 and let Banjo compute it / automatically. / /
p_pixels | A pre-allocated array of pixels / |
width | Width of the bitmap. / |
height | Height of the bitmap. / |
mode | The pixel mode. / |
stride | The suggested bitmap stride. / |
p_pixels
is 0. / / p_pixels
. / bj_bitmap will not modify it and it will not be released upon calling / bj_bitmap_del. / / The caller is responsible for releasing the bitmap using bj_bitmap_del. / ////////////////////////////////////////////////////////////////////////////// bj_bitmap* bj_bitmap_new_from_pixels(
void* p_pixels,
size_t width,
size_t height,
bj_pixel_mode mode,
size_t stride
);////////////////////////////////////////////////////////////////////////////// / Creates a new bj_bitmap by copying p_bitmap
. / /
p_bitmap | The source bitmap. / / |
p_source
was initially created using bj_bitmap_new_from_pixels, / the "weak" property of the bitmap is not maintained in the new bitmap and / the caller is not responsible for manually releasing its pixel data. / ////////////////////////////////////////////////////////////////////////////// bj_bitmap* bj_bitmap_copy(
const bj_bitmap* p_bitmap
);////////////////////////////////////////////////////////////////////////////// / Creates a new bj_bitmap by converting p_bitmap
. / /
p_bitmap | The source bitmap. / |
mode | The new pixel mode. / / |
mode
as pixel mode. / The pixels are then converted to fill-in the new buffer. / / bj_bitmap_copy(p_bitmap)
if mode == bj_bitmap_mode(p_bitmap)
. / / Returns 0 if mode
is BJ_PIXEL_MODE_UNKNOWN or an unsupported value. / / p_bitmap
was initially created using bj_bitmap_new_from_pixels, / the "weak" property of the bitmap is not maintained in the new bitmap and / the caller is not responsible for manually releasing its pixel data. / ////////////////////////////////////////////////////////////////////////////// bj_bitmap* bj_bitmap_convert(
const bj_bitmap* p_bitmap,
bj_pixel_mode mode
);////////////////////////////////////////////////////////////////////////////// / Initializes a new bj_bitmap with the specified width and height. / /
p_bitmap | The bitmap object. / |
p_pixels | The pixel buffer data. / |
width | Width of the bitmap. / |
height | Height of the bitmap. / |
mode | The pixel mode. / |
stride | The suggested bitmap stride. / / If the pixel buffer provided by p_pixels is 0, the buffer will allocate / / |
////////////////////////////////////////////////////////////////////////////// / Resets a bj_bitmap object making it ready for a new init or free. / /
p_bitmap | Pointer to the bj_bitmap object to reset. ////////////////////////////////////////////////////////////////////////////// void bj_bitmap_reset( bj_bitmap* p_bitmap ); |
////////////////////////////////////////////////////////////////////////////// / Get the underlying pixels data for direct access. / /
p_bitmap | The bitmap object. / |
////////////////////////////////////////////////////////////////////////////// / Get the width of the given bitmap / /
p_bitmap | The bitmap object. / |
////////////////////////////////////////////////////////////////////////////// / Get the height of the given bitmap / /
p_bitmap | The bitmap object. / |
////////////////////////////////////////////////////////////////////////////// / Get the pixel mode of the given bitmap / /
p_bitmap | The bitmap object. / |
////////////////////////////////////////////////////////////////////////////// / Get the number of bytes in a row of pixel data, including the padding. / /
p_bitmap | The bitmap object. / |
////////////////////////////////////////////////////////////////////////////// / Gets the RGB value of a pixel given its 32-bits representation. / /
p_bitmap | The bitmap object / |
x | The X coordinate of the pixel. / |
y | The Y coordinate of the pixel. / |
p_red | A location to the red component / |
p_green | A location to the green component / |
p_blue | A location to the blue component / ////////////////////////////////////////////////////////////////////////////// void bj_bitmap_rgb( const bj_bitmap* p_bitmap, size_t x, size_t y, uint8_t* p_red, uint8_t* p_green, uint8_t* p_blue ); |
////////////////////////////////////////////////////////////////////////////// / Returns an opaque value representing a pixel color, given its RGB composition. / /
p_bitmap | The bitmap object. / |
red | The red component of the color / |
green | The green component of the color / |
blue | The blue component of the color / |
uint32_t
value. / ////////////////////////////////////////////////////////////////////////////// uint32_t bj_bitmap_pixel_value(
bj_bitmap* p_bitmap,
uint8_t red,
uint8_t green,
uint8_t blue
);////////////////////////////////////////////////////////////////////////////// / Change the pixel color at given coordinate. / /
p_bitmap | The bitmap object. / |
x | The X coordinate of the pixel. / |
y | The Y coordinate of the pixel. / |
value | The pixel value to put. ////////////////////////////////////////////////////////////////////////////// void bj_bitmap_put_pixel( bj_bitmap* p_bitmap, size_t x, size_t y, uint32_t value ); |
////////////////////////////////////////////////////////////////////////////// / Fills the entire bitmap with the clear color. / /
p_bitmap | The bitmap object to reset. / / The clear color can be set with bj_bitmap_set_clear_color. / This function effectively fills all the pixels of the bitmap with / the clear color. ////////////////////////////////////////////////////////////////////////////// void bj_bitmap_clear( bj_bitmap* p_bitmap ); |
////////////////////////////////////////////////////////////////////////////// / Draws a line of pixels in the given bitmap. / / The line is drawn for each pixel between p0 and p1. / /
p_bitmap | The bitmap object. / |
p0 | The first point in the line. / |
p1 | The second point in the line. / |
pixel | The line pixel value. / / |
////////////////////////////////////////////////////////////////////////////// / Draws the edges of a triangle given its 3 corners. / /
p_bitmap | The bitmap object. / |
p0 | The first point of the triangle. / |
p1 | The second point of the triangle. / |
p2 | The third point of the triangle. / |
color | The line color. / / |
////////////////////////////////////////////////////////////////////////////// / Gets the color of a bitmap pixel, given its coordinates. / /
p_bitmap | The bitmap object. / |
x | The X coordinate of the pixel. / |
y | The Y coordinate of the pixel. / |
////////////////////////////////////////////////////////////////////////////// / Sets the color used for clearing the bitmap. / /
p_bitmap | The target bitmap. / |
clear_color | The new clear color. ////////////////////////////////////////////////////////////////////////////// void bj_bitmap_set_clear_color( bj_bitmap* p_bitmap, uint32_t clear_color ); |
////////////////////////////////////////////////////////////////////////////// / Bitmap blitting operation from a source to a destination bitmap. / /
p_source | The source bj_bitmap to copy from. / |
p_source_area | The area to copy from in the source bitmap. / |
p_destination | The destination bitmap. / |
p_destination_area | The area to copy to in the destination bitmap. / |
////////////////////////////////////////////////////////////////////////////// / Stretched bitmap blitting operation from a source to a destination bitmap. / /
p_source | The source bj_bitmap to copy from. / |
p_source_area | The area to copy from in the source bitmap. / |
p_destination | The destination bitmap. / |
p_destination_area | The area to copy to in the destination bitmap. / |
p_source_area
is 0, the entire bitmap is copied. / If p_destination_area
is 0, the source will fill in the entire / destination bitmap. / / Contrary to bj_bitmap_blit, this function scales the source bitmap's / area to fille the entire destination area. / / .w
or / .h
set to 0. \par Clipping The resulting blit can be clipped if it is performed partially or totally outside of the destination bitmap.
void bj_bitmap_del | ( | bj_bitmap * | p_bitmap | ) |
p_bitmap | Pointer to the bj_bitmap object to delete. |
bj_bitmap * bj_bitmap_new | ( | size_t | width, |
size_t | height, | ||
bj_pixel_mode | mode, | ||
size_t | stride ) |
width | Width of the bitmap. |
height | Height of the bitmap. |
mode | The pixel mode. |
stride | The suggested bitmap stride. |
The stride corresponds to the size in bytes of a row. If the value is less than the required stride, the actual minimum stride is used. Set it to 0 to automatically compute the stride.
p_path | Path to the bitmap file. |
p_error | Pointer to an error object to store any errors encountered during loading. |
The new object must be deleted using bj_bitmap_del.
Banjo supports the reading or 1, 4, 8, 24 and 32 bits per pixels images. Reading RLE encoding for 4 and 8 bpp is also supported.
According to the file compression (MSDN) and the pixel byte size, the created Bitmap will have one of the following pixel mode:
Bits Per Pixel | Compression | bj_pixel_mode |
---|---|---|
1 | BI_RGB | BJ_PIXEL_MODE_INDEXED_1 |
4 | BI_RGB | BJ_PIXEL_MODE_INDEXED_4 |
4 | BJ_RLE4 | BJ_PIXEL_MODE_INDEXED_4 |
8 | BI_RGB | BJ_PIXEL_MODE_INDEXED_8 |
8 | BI_RLE8 | BJ_PIXEL_MODE_INDEXED_8 |
16 | BI_RGB | BJ_PIXEL_MODE_XRGB1555 |
16 | BI_BITFIELDS | Depends on bit fields |
24 | BI_RGB | BJ_PIXEL_MODE_BGR24 |
32 | BI_RGB | BJ_PIXEL_MODE_XRGB8888 |
32 | BI_BITFIELDS | Depends on bit fields |
Banjo does not support all bitfield configuration. The following table shows our supported bit fields:
Bits Per Pixel | Red Mask | Green Mask | Blue Mask | bj_pixel_mode |
---|---|---|---|---|
16 | 0x0000F800 | 0x000007E0 | 0x0000001F | BJ_PIXEL_MODE_RGB565 |
32 | 0x00FF0000 | 0x0000FF00 | 0x000000FF | BJ_PIXEL_MODE_XRGB8888 |
Any other configuration leads to either BJ_PIXEL_MODE_UNKNOWN
or a failure in loading the file.
Once loaded, the pixel mode can be retrieved using bj_bitmap_mode.
While reading indexed Bitmap works, 1, 4 and 8bpp images are automatically converted to 24bpp images for now.