AC-Colour-1.1.4: Efficient RGB colour types.



This module provides Colour8, which stores linear RGB (red, green, blue) colour values where each channel is a Word8. It also provides arithmetic over such colours, and a few predefined colours.

It is the general intention that "most" work will be done with Data.Colour.Double, with values converted to Colour8 only as a final step. However, full arithmetic is supported anyway, in case anybody wants to work that way. It is slightly less efficient and flexible, however.

Beware that "most" RGB data found in external sources is in the (non-linear) sRGB colour space, not the linear RGB colour space used here. See Data.Colour.Nonlinear for conversion functions.



data Colour8 Source

The integral colour. It stores three channels (red, green and blue) as linear Word8 values ranging from 0 to 255. (0 represents minimum intensity, 255 represents maximum. Black is therefore Colour8 0 0 0 and white is Colour8 255 255 255.)

The channel values are stored as strict, unboxed fields, so operating on Colour8s should be quite efficient in time and space.

The Num and Fractional instances provide arithmetic for Colour8s. Note that (*) acts channel-wise; this is usually what is wanted.




red8 :: !Word8
green8 :: !Word8
blue8 :: !Word8

c8map :: (Word8 -> Word8) -> Colour8 -> Colour8Source

Apply a function to every channel of a Colour8. (Mostly used internally; exposed here in case it might be useful.)

c8zip :: (Word8 -> Word8 -> Word8) -> Colour8 -> Colour8 -> Colour8Source

The colour equivilent of Data.List.zipWith. (Mostly used internally; exposed here in case it might be useful.)

c8fold :: (Word8 -> Word8 -> Word8) -> Colour8 -> Word8Source

Use a function to fold the three values in a Colour8 into a single value. No particular order of application is promised.

grey8 :: Word8 -> Colour8Source

Convert a Word8 into a shade of grey.

c8scale :: Word8 -> Colour8 -> Colour8Source

Scale a Colour8 by the specified amount. Recall that 0x00 means zero, and 0xFF means one. This means that it is impossible to make a colour brighter, only darker. It also means this operation is modestly inefficient due to the renormalisation steps.

unpack8 :: Colour8 -> (Word8, Word8, Word8)Source

Convert a Colour8 to a tuple.

pack8 :: (Word8, Word8, Word8) -> Colour8Source

Convert a tuple to a Colour8.

c8Black :: Colour8Source

Constant: Black.

c8Red :: Colour8Source

Constant: Red.

c8Yellow :: Colour8Source

Constant: Yellow.

c8Green :: Colour8Source

Constant: Green.

c8Cyan :: Colour8Source

Constant: Cyan.

c8Blue :: Colour8Source

Constant: Blue.

c8Magenta :: Colour8Source

Constant: Magenta.

c8White :: Colour8Source

Constant: White.