The supported image formats are those defined in Cairo::Format
An ImageSurface is the most generic type of Surface and the only one that is available by default. You can either create an ImageSurface whose data is managed by Cairo, or you can create an ImageSurface with a data buffer that you allocated yourself so that you can have full access to the data.
When you create an ImageSurface with your own data buffer, you are free to examine the results at any point and do whatever you want with it. Note that if you modify anything and later want to continue to draw to the surface with cairo, you must let cairo know via Cairo::Surface::mark_dirty()
Note that like all surfaces, an ImageSurface is a reference-counted object that should be used via Cairo::RefPtr.
Public Member Functions | |
const unsigned char * | get_data () const |
unsigned char * | get_data () |
Get a pointer to the data of the image surface, for direct inspection or modification. | |
Format | get_format () const |
gets the format of the surface | |
int | get_height () const |
Gets the height of the ImageSurface in pixels. | |
int | get_stride () const |
Return value: the stride of the image surface in bytes (or 0 if is not an image surface). | |
int | get_width () const |
Gets the width of the ImageSurface in pixels. | |
ImageSurface (cairo_surface_t *cobject, bool has_reference=false) | |
Create a C++ wrapper for the C instance. | |
virtual | ~ImageSurface () |
Static Public Member Functions | |
static RefPtr< ImageSurface > | create (unsigned char *data, Format format, int width, int height, int stride) |
Creates an image surface for the provided pixel data. | |
static RefPtr< ImageSurface > | create (Format format, int width, int height) |
Creates an image surface of the specified format and dimensions. | |
static RefPtr< ImageSurface > | create_from_png (cairo_read_func_t read_func, void *closure) |
Creates a new image surface from PNG data read incrementally via the read_func function. | |
static RefPtr< ImageSurface > | create_from_png (std::string filename) |
Creates a new image surface and initializes the contents to the given PNG file. |
Cairo::ImageSurface::ImageSurface | ( | cairo_surface_t * | cobject, | |
bool | has_reference = false | |||
) | [explicit] |
Create a C++ wrapper for the C instance.
This C++ instance should then be given to a RefPtr.
cobject | The C instance. | |
has_reference | Whether we already have a reference. Otherwise, the constructor will take an extra reference. |
virtual Cairo::ImageSurface::~ImageSurface | ( | ) | [virtual] |
static RefPtr<ImageSurface> Cairo::ImageSurface::create | ( | unsigned char * | data, | |
Format | format, | |||
int | width, | |||
int | height, | |||
int | stride | |||
) | [static] |
Creates an image surface for the provided pixel data.
The output buffer must be kept around until the Surface is destroyed or finish() is called on the surface. The initial contents of buffer will be used as the inital image contents; you must explicitely clear the buffer, using, for example, Cairo::Context::rectangle() and Cairo::Context::fill() if you want it cleared.
If you want to be able to manually manipulate or extract the data after drawing to the surface with Cairo, you should use this function to create the Surface. Since you own the internal data, you can do anything you want with it.
data | a pointer to a buffer supplied by the application in which to write contents. | |
format | the format of pixels in the buffer | |
width | the width of the image to be stored in the buffer | |
height | the height of the image to be stored in the buffer | |
stride | the number of bytes between the start of rows in the buffer. Having this be specified separate from width allows for padding at the end of rows, or for writing to a subportion of a larger image. |
static RefPtr<ImageSurface> Cairo::ImageSurface::create | ( | Format | format, | |
int | width, | |||
int | height | |||
) | [static] |
Creates an image surface of the specified format and dimensions.
The initial contents of the surface is undefined; you must explicitely clear the buffer, using, for example, Cairo::Context::rectangle() and Cairo::Context::fill() if you want it cleared.
Use this function to create the surface if you don't need access to the internal data and want cairo to manage it for you. Since you don't have access to the internal data, the resulting surface can only be saved to a PNG image file (if cairo has been compiled with PNG support) or as a source surface (see Cairo::SurfacePattern).
format | format of pixels in the surface to create | |
width | width of the surface, in pixels | |
height | height of the surface, in pixels |
static RefPtr<ImageSurface> Cairo::ImageSurface::create_from_png | ( | cairo_read_func_t | read_func, | |
void * | closure | |||
) | [static] |
Creates a new image surface from PNG data read incrementally via the read_func function.
read_func | function called to read the data of the file | |
closure | data to pass to read_func. |
static RefPtr<ImageSurface> Cairo::ImageSurface::create_from_png | ( | std::string | filename | ) | [static] |
Creates a new image surface and initializes the contents to the given PNG file.
filename | name of PNG file to load |
const unsigned char* Cairo::ImageSurface::get_data | ( | ) | const |
unsigned char* Cairo::ImageSurface::get_data | ( | ) |
Get a pointer to the data of the image surface, for direct inspection or modification.
Return value: a pointer to the image data of this surface or NULL if is not an image surface.
Format Cairo::ImageSurface::get_format | ( | ) | const |
gets the format of the surface
int Cairo::ImageSurface::get_height | ( | ) | const |
Gets the height of the ImageSurface in pixels.
int Cairo::ImageSurface::get_stride | ( | ) | const |
Return value: the stride of the image surface in bytes (or 0 if is not an image surface).
The stride is the distance in bytes from the beginning of one row of the image data to the beginning of the next row.
int Cairo::ImageSurface::get_width | ( | ) | const |
Gets the width of the ImageSurface in pixels.