|
Graphics.UI.Gtk.Gdk.Pixbuf | Portability | portable (depends on GHC) | Stability | provisional | Maintainer | gtk2hs-users@lists.sourceforge.net |
|
|
|
|
|
Description |
Pixbufs are bitmap images in memory.
- A Pixbuf is used to represent images. It contains information
about the image's pixel data, its color space, bits per sample, width
and height, and the rowstride or number of bytes between rows.
- This module contains functions to scale and crop
Pixbufs and to scale and crop a Pixbuf and
compose the result with an existing image.
- Pixbufs can be displayed on screen by either creating an Image that
from the Pixbuf or by rendering (part of) the Pixbuf into a
vanilla widget like DrawWindow using drawPixbuf.
|
|
Synopsis |
|
|
|
Documentation |
|
data Pixbuf |
Instances | |
|
|
class GObjectClass o => PixbufClass o |
| Instances | |
|
|
data PixbufError |
Error codes for loading image files.
| Constructors | PixbufErrorCorruptImage | | PixbufErrorInsufficientMemory | | PixbufErrorBadOption | | PixbufErrorUnknownType | | PixbufErrorUnsupportedOperation | | PixbufErrorFailed | |
| Instances | |
|
|
data Colorspace |
Enumerate all supported color spaces.
- Only RGB is supported right now.
| Constructors | | Instances | |
|
|
pixbufGetColorSpace :: Pixbuf -> IO Colorspace |
Queries the color space of a pixbuf.
|
|
pixbufGetNChannels :: Pixbuf -> IO Int |
Queries the number of colors for each pixel.
- This function returns 3 for an RGB image without alpha (transparency)
channel, 4 for an RGB image with alpha channel.
|
|
pixbufGetHasAlpha :: Pixbuf -> IO Bool |
Query if the image has an alpha channel.
- The alpha channel determines the opaqueness of the pixel.
|
|
pixbufGetBitsPerSample :: Pixbuf -> IO Int |
Queries the number of bits for each color.
- Each pixel is has a number of cannels for each pixel, each channel
has this many bits.
|
|
data PixbufData i e |
An array that stored the raw pixel data of a Pixbuf.
| Instances | |
|
|
pixbufGetPixels :: (Ix i, Num i, Storable e) => Pixbuf -> IO (PixbufData i e) |
Retrieve the internal array of raw image data.
- Image data in a pixbuf is stored in memory in uncompressed,
packed format. Rows in the image are stored top to bottom, and in each
row pixels are stored from left to right. There may be padding at the
end of a row. The rowstride value of a pixbuf, as returned by
pixbufGetRowstride, indicates the number of bytes between rows.
- The returned array is a flat representation of a three dimensional
array: x-coordiante, y-coordinate and several channels for each color.
The number of channels is usually 3 for plain RGB data or 4 for
RGB data with an alpha channel. To read or write a specific pixel
use the formula: p = y * rowstride + x * nChannels for the pixel.
If the array contains bytes (or Word8s), p+0 is the red value,
p+1 green, p+2 blue and p+3 the alpha (transparency) channel
if present. If the alpha channel is present, the array can accessed
as an array over Word32 to modify a whole pixel at a time. See also
pixbufGetBitsPerSample and pixbufGetNChannels.
- Calling this function without explicitly giving it a type will often
lead to a compiler error since the type parameter e is underspecified.
If this happens the function can be explicitly typed:
pbData <- (pixbufGetPixels pb :: IO (PixbufData Int Word8))
- If modifying an image through Haskell's array interface is not
fast enough, it is possible to use unsafeRead and
unsafeWrite from Data.Array.Base which have the same type signatures
as readArray and writeArray. Note that these are internal
functions that might change with GHC.
|
|
pixbufGetWidth :: Pixbuf -> IO Int |
Queries the width of this image.
|
|
pixbufGetHeight :: Pixbuf -> IO Int |
Queries the height of this image.
|
|
pixbufGetRowstride :: Pixbuf -> IO Int |
Queries the rowstride of this image.
- Queries the rowstride of a pixbuf, which is the number of bytes between
rows. Use this value to caculate the offset to a certain row.
|
|
pixbufGetOption :: Pixbuf -> String -> IO (Maybe String) |
Returns an attribut of an image.
- Looks up if some information was stored under the key when
this image was saved.
|
|
pixbufNewFromFile :: FilePath -> IO (Either (PixbufError, String) Pixbuf) |
Load an image synchonously.
- Use this function to load only small images as this call will block.
- The function will return Left (err,msg) where err
is the error code and msg is a human readable description
of the error. If an error occurs which is not captured by any of
those in PixbufError, an exception is thrown.
|
|
type ImageType = String |
A string representing an image file format.
|
|
pixbufGetFormats :: [ImageType] |
|
pixbufSave :: Pixbuf -> FilePath -> ImageType -> [(String, String)] -> IO (Maybe (PixbufError, String)) |
Save an image to disk.
- The function takes a list of key - value pairs to specify
either how an image is saved or to actually save this additional
data with the image. JPEG images can be saved with a "quality"
parameter; its value should be in the range [0,100]. Text chunks
can be attached to PNG images by specifying parameters of the form
"tEXt::key", where key is an ASCII string of length 1-79.
The values are Unicode strings.
- The function returns Nothing if writing was successful.
Otherwise the error code and a description is returned or,
if the error is not captured by one of the error codes in
PixbufError, an exception is thrown.
|
|
pixbufNew :: Colorspace -> Bool -> Int -> Int -> Int -> IO Pixbuf |
Create a new image in memory.
- Creates a new pixbuf structure and allocates a buffer for
it. Note that the buffer is not cleared initially.
- The boolean flag is true if the pixbuf should have an alpha
(transparency) channel. The next integer denotes the bits per
color sample, e.g. 8 bits per color for 2^24 colors. The last
two integers denote the width and height, respectively.
|
|
pixbufNewFromXPMData :: [String] -> IO Pixbuf |
Create a new image from a String.
- Creates a new pixbuf from a string description.
|
|
data InlineImage |
A dymmy type for inline picture data.
- This dummy type is used to declare pointers to image data
that is embedded in the executable. See
pixbufNewFromInline for an example.
|
|
|
pixbufNewFromInline :: Ptr InlineImage -> IO Pixbuf |
Create a new image from a static pointer.
- Like pixbufNewFromXPMData, this function allows to
include images in the final binary program. The method used by this
function uses a binary representation and therefore needs less space
in the final executable. Save the image you want to include as
png and run:
@echo #include "my_image.h" > my_image.c
gdk-pixbuf-csource --raw --extern --name=my_image myimage.png >> my_image.c
on it. Write a header file my_image.h containing:
#include <gdk/gdk.h>
extern guint8 my_image[];
and save it in the current directory.
The created file can be compiled with:
cc -c my_image.c `pkg-config --cflags gdk-2.0`
into an object file which must be linked into your Haskell program by
specifying my_image.o and "-#include my_image.h" on
the command line of GHC.
Within you application you delcare a pointer to this image:
foreign label "my_image" myImage :: Ptr InlineImage
Calling pixbufNewFromInline with this pointer will
return the image in the object file. Creating the C file with
the --raw flag will result in a non-compressed image in the
object file. The advantage is that the picture will not be
copied when this function is called.
|
|
pixbufNewSubpixbuf :: Pixbuf -> Int -> Int -> Int -> Int -> IO Pixbuf |
Create a restricted view of an image.
- This function returns a Pixbuf object which shares
the image of the original one but only shows a part of it.
Modifying either buffer will affect the other.
- This function throw an exception if the requested bounds are invalid.
|
|
pixbufCopy :: Pixbuf -> IO Pixbuf |
Create a deep copy of an image.
|
|
data InterpType |
How an image is scaled.
- InterpNearest
- Nearest neighbor sampling; this is the
fastest and lowest quality mode. Quality is normally unacceptable when
scaling down, but may be OK when scaling up.
- InterpTiles
- This is an accurate simulation of the
PostScript image operator without any interpolation enabled. Each
pixel is rendered as a tiny parallelogram of solid color, the edges of
which are implemented with antialiasing. It resembles nearest neighbor
for enlargement, and bilinear for reduction.
- InterpBilinear
- Best quality/speed balance; use this
mode by default. Bilinear interpolation. For enlargement, it is
equivalent to point-sampling the ideal bilinear-interpolated
image. For reduction, it is equivalent to laying down small tiles and
integrating over the coverage area.
- InterpHyper
- This is the slowest and highest quality
reconstruction function. It is derived from the hyperbolic filters in
Wolberg's "Digital Image Warping", and is formally defined as the
hyperbolic-filter sampling the ideal hyperbolic-filter interpolated
image (the filter is designed to be idempotent for 1:1 pixel mapping).
| Constructors | InterpNearest | | InterpTiles | | InterpBilinear | | InterpHyper | |
| Instances | |
|
|
pixbufScaleSimple :: Pixbuf -> Int -> Int -> InterpType -> IO Pixbuf |
Scale an image.
- Creates a new GdkPixbuf containing a copy of
src scaled to the given measures. Leaves src
unaffected.
- interp affects the quality and speed of the scaling function.
InterpNearest is the fastest option but yields very poor quality
when scaling down. InterpBilinear is a good trade-off between
speed and quality and should thus be used as a default.
|
|
pixbufScale :: Pixbuf -> Pixbuf -> Int -> Int -> Int -> Int -> Double -> Double -> Double -> Double -> InterpType -> IO () |
Copy a scaled image part to another image.
- This function is the generic version of pixbufScaleSimple.
It scales src by scaleX and scaleY and
translate the image by offsetX and offsetY. Whatever
is in the intersection with the rectangle destX,
destY, destWidth, destHeight will be
rendered into dest.
- The rectangle in the destination is simply overwritten. Use
pixbufComposite if you need to blend the source
image onto the destination.
|
|
pixbufComposite :: Pixbuf -> Pixbuf -> Int -> Int -> Int -> Int -> Double -> Double -> Double -> Double -> InterpType -> Word8 -> IO () |
Blend a scaled image part onto another image.
- This function is similar to pixbufScale but allows the
original image to "shine through". The alpha value determines
how opaque the source image is. Passing 0 is
equivalent to not calling this function at all, passing
255 has the
same effect as calling pixbufScale.
|
|
pixbufAddAlpha :: Pixbuf -> Maybe (Word8, Word8, Word8) -> IO Pixbuf |
Add an opacity layer to the Pixbuf.
- This function returns a copy of the given src
Pixbuf, leaving src unmodified.
The new Pixbuf has an alpha (opacity)
channel which defaults to 255 (fully opaque pixels)
unless src already had an alpha channel in which case
the original values are kept.
Passing in a color triple (r,g,b) makes all
pixels that have this color fully transparent
(opacity of 0). The pixel color itself remains unchanged
during this substitution.
|
|
pixbufCopyArea :: Pixbuf -> Int -> Int -> Int -> Int -> Pixbuf -> Int -> Int -> IO () |
Copy a rectangular portion into another
Pixbuf.
- The source Pixbuf remains unchanged. Converion between
different formats is done automatically.
|
|
pixbufFill :: Pixbuf -> Word8 -> Word8 -> Word8 -> Word8 -> IO () |
Fills a Pixbuf with a color.
- The passed-in color is a quadruple consisting of the red, green, blue
and alpha component of the pixel. If the Pixbuf does not
have an alpha channel, the alpha value is ignored.
|
|
pixbufGetFromDrawable :: DrawableClass d => d -> Rectangle -> IO (Maybe Pixbuf) |
Take a screenshot of a Drawable.
- This function creates a Pixbuf and fills it with the image
currently in the Drawable (which might be invalid if the
window is obscured or minimized). Note that this transfers data from
the server to the client on X Windows.
- This function will return a Pixbuf with no alpha channel
containing the part of the Drawable specified by the
rectangle. The function will return Nothing if the window
is not currently visible.
|
|
Produced by Haddock version 0.7 |