repa-devil-0.3.0: Support for image reading and writing of Repa arrays using in-place FFI calls

PortabilityRepa interface to the DevIL image loading library.
Stabilityprovisional
MaintainerDon Stewart <dons00@gmail.com> , Raphael Javaux <raphaeljavaux@gmail.com
Safe HaskellNone

Data.Array.Repa.IO.DevIL

Contents

Description

Read and write images in many formats, representing them in Haskell as a 3-dimensional repa array. Image parsing and decoding is done by the Developers Image Library, DevIL.

  • Many formats are supported, including .png, .bmp, .jpg, .tif
  • Image format parsing is determined by the filepath extension type.
  • Only RGB, RGBA and Greyscale images are supported.

Example: read a .png file into a repa array, and write it out as a .jpg

 main = runIL $ do
          x <- readImage "/tmp/y.png" 
          writeImage "/tmp/x.jpg" x

Note that as DevIL is stateful, we ensure the library is initialized by running image manipulation functions in the IL monad, a wrapper over IO that ensures the library has been initialized. It is a type error to call image functions outside of the IL monad.

Synopsis

The Image array type

data Image Source

RGBA and RGB images are 3D repa arrays where indices are Z :. row :. column :. color channel. Grey images are 2D repa arrays.

The origin (Z :. 0 :. 0) is on the lower left point of the image.

The IL monad

data IL a Source

The IL monad. Provides statically-guaranteed access to an initialized IL context.

runIL :: IL a -> IO aSource

Running code in the IL monad. This is a simple wrapper over IO that guarantees the DevIL library has been initialized before you run functions on it.

Image IO

readImage :: FilePath -> IL ImageSource

Reads an image into a repa array. It uses directly the C array using the repa's foreign arrays wrapper.

Example:

 main = do
    x <- runIL $ readImage "/tmp/x.png"
    .. operations on x ..

Note: The image input type is determined by the filename extension.

writeImage :: FilePath -> Image -> IL ()Source

Writes an Image to a file. The image array must be represented as foreign buffers. You can use copyS or copyP to convert the array.

Note: The image output type is determined by the filename extension.