Name¶
lua-oocairo-surface - Cairo surface objects
Introduction¶
All Cairo drawing operations are targeted at a
surface, which represents
a backend writing drawing instructions out to a vector graphics file (SVG,
PDF, etc.) or drawing to a bitmap image. Surfaces are created with one of the
top-level constructor functions listed in
lua-oocairo(3).
Surface objects can be compared with the "==" operator. This will
compare the identity of the objects, so different Lua objects which refer to
the same "cairo_surface_t" will compare as equal.
Methods¶
The following methods are available on surface objects.
- surf:copy_page ()
- Same as "surf:show_page()", but keeps whatever
has been drawn on the current page for additional drawing on the next
page.
- surf:finish ()
- Finish any drawing to the surface and disconnect from any
external resources it uses, such as closing a file handle if it's writing
output to a file. No more drawing can be done with this surface after
calling this method.
- surf:flush ()
- Finish any drawing work currently in progress.
- surf:get_content ()
- Returns a string indicating what kind of content the
surface has (colours and/or transparency). The return value will be one of
the strings accepted by the "surface_create_similar" function
(see lua-oocairo(3)).
- surf:get_data ()
- Returns the raw data for an image surface as a string, so
that you can pass it to some other library or get the exact colours of
each pixel. Returns nothing for surfaces which aren't image surfaces.
See the example program get-data.lua included with the distribution
for some code to extract the colour values from pixels in the image data.
There are actually two values returned from this method, the data itself and
the stride for it. The stride is the number of bytes of the string
used for each line of the image. This is at least the width of the image
multiplied by the number of bytes needed for each pixel, although it might
be larger (in which case the extra bytes at the end of each line of pixels
should be ignored). The length of the data will always be equal to the
stride multipled by the image's height.
The data string will contain rows of pixels starting with the top row. Each
row contains the pixels one after another, with no padding in between,
starting from the left hand side.
The way individual pixels are stored depends on the image format, which can
be queried with the "surf:get_format()" method. For colour
images, that is ones with a format of "rgb24" or
"argb32", each pixel will be four bytes in size. The alpha, red,
green, and blue components will be in the order given by the string
"Cairo.BYTE_ORDER". On "rgb24" images the alpha value
should be ignored, although it will still be present (that is, the pixels
will still be stored in 32 bits each, not 24 bits).
If the format is "a8" then each pixel will be one byte. The
"a1" format stores each pixel as one bit, in groups of 32 bits
ordered according to the endianness of the platform (so if the last value
returned from the method is "argb" then the first pixel will be
the most significant bit of the 32 bits, otherwise the reverse).
- surf:get_device_offset ()
- Returns two numbers, whichever ones were set with
"surf:set_device_offset()".
- surf:get_eps ()
- Returns a boolean value matching whatever was last set with
"surf:set_eps()", or throws an exception if surf is not a
PostScript surface.
- surf:get_fallback_resolution ()
- Returns two numbers, the values set by
"surf:set_fallback_resolution()". Only available with
Cairo 1.8 or better.
- surf:get_font_options ()
- Returns a new font options object containing the preferred
options for rendering text on this surface. These options are used
automatically when rendering text, so can usually be ignored, but might be
useful if you want to render some text to an image internally and then
present it on a surface on screen, in a widget of some sort.
See lua-oocairo-fontopt(3) for more about font options objects.
- surf:get_format ()
- Return the pixel format for an image surface. Throws an
exception for other surface types. The return value will be one of the
strings accepted by the "image_surface_create" function (see
lua-oocairo(3)).
- surf:get_gdk_pixbuf ()
- Creates a GdkPixbuf object containing the image currently
held on an image surface. The return value is suitable for use with the
Lua-Gnome library, for example as an icon. See the example program
gtk-drawing.lua for an example showing that use.
Must be called on an image surface, otherwise it throws an exception. Also,
it currently only supports the "rgb24" adn "argb32"
formats.
Requires the Lua-Gnome package to have been installed and the
"gtk" module to be loaded.
- surf:get_height ()
- Returns the height in pixels of an image surface, or throws
an exception for other types.
- surf:get_type ()
- Returns a string indicating what type of surface object
surf is. The value will be one of the following:
- image
- A bitmap image stored in a memory buffer.
- pdf
- Vector drawing into a Adobe(tm) PDF file.
- ps
- Vector drawing into a PostScript file.
- svg
- Vector drawing into an SVG file.
- xlib
- An X window in a graphical user interface such as
Gtk+.
Other values are theoretically possible, but there isn't yet any way to create
them with this binding of Cairo.
- surf:get_width ()
- Returns the width in pixels of an image surface, or throws
an exception for other types.
- surf:has_show_text_glyphs ()
- Returns true if this surface can use text cluster
information to improve the quality of text information in the output. If
true then it may be beneficial to use the "show_text_glyphs"
method on a context object instead of the "show_glyphs" method,
otherwise that will make no difference.
Only available with Cairo 1.8 or better.
- surf:set_device_offset (x, y)
- Set two numbers which are added to the x and
y coordinates used for drawing after the current transformation
matrix has been applied.
- surf:set_eps (eps)
- On a PostScript surface this sets whether the output should
be encapsulated PostScript or not. The value of eps is interpreted
as boolean. Throws an exception if surf is not a PostScript
surface.
- surf:set_fallback_resolution (x, y)
- Set the resolution at which vector graphics are rendered to
bitmaps when drawing something on a vector-based surface type which can't
be directly represented. Has no effect on surfaces where the output is
bitmapped anyway. The values of x and y must be
numbers.
- surf:set_size (width, height)
- Set the size in points of the next page of PostScript or
PDF output. This should be called before any drawing has been done on the
new page (probably just after creating the surface or just after the last
"surf:show_page()" call). The values of width and
height should be numbers. Throws an exception if surf isn't
a PostScript or PDF surface.
- surf:show_page ()
- Starts a new page on surfaces which support that (such as
PDF and PostScript).
- surf:write_to_png (file/filename)
- Write the bitmap data from a surface out to the specified
file in PNG format. The argument can be a filename or file handle.