colour 2.2.1 → 2.3.0
raw patch · 11 files changed
+243/−40 lines, 11 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
- Data.Colour.Names: aliceblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: antiquewhite :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: aqua :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: aquamarine :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: azure :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: beige :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: bisque :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: blanchedalmond :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: blue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: blueviolet :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: brown :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: burlywood :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: cadetblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: chartreuse :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: chocolate :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: coral :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: cornflowerblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: cornsilk :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: crimson :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: cyan :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkcyan :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkgoldenrod :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkgray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkgreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkgrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkkhaki :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkmagenta :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkolivegreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkorange :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkorchid :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkred :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darksalmon :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkseagreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkslateblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkslategray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkslategrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkturquoise :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: darkviolet :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: deeppink :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: deepskyblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: dimgray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: dimgrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: dodgerblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: firebrick :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: floralwhite :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: forestgreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: fuchsia :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: gainsboro :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: ghostwhite :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: gold :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: goldenrod :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: gray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: green :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: greenyellow :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: grey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: honeydew :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: hotpink :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: indianred :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: indigo :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: ivory :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: khaki :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lavender :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lavenderblush :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lawngreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lemonchiffon :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightcoral :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightcyan :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightgoldenrodyellow :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightgray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightgreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightgrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightpink :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightsalmon :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightseagreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightskyblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightslategray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightslategrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightsteelblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lightyellow :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: lime :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: limegreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: linen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: magenta :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: maroon :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumaquamarine :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumorchid :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumpurple :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumseagreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumslateblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumspringgreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumturquoise :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mediumvioletred :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: midnightblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mintcream :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: mistyrose :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: moccasin :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: navajowhite :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: navy :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: oldlace :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: olive :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: olivedrab :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: orange :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: orangered :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: orchid :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: palegoldenrod :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: palegreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: paleturquoise :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: palevioletred :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: papayawhip :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: peachpuff :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: peru :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: pink :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: plum :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: powderblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: purple :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: readColourName :: (Monad m, Ord a, Floating a) => String -> m (Colour a)
- Data.Colour.Names: red :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: rosybrown :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: royalblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: saddlebrown :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: salmon :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: sandybrown :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: seagreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: seashell :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: sienna :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: silver :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: skyblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: slateblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: slategray :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: slategrey :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: snow :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: springgreen :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: steelblue :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: tan :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: teal :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: thistle :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: tomato :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: turquoise :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: violet :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: wheat :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: white :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: whitesmoke :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: yellow :: (Ord a, Floating a) => Colour a
- Data.Colour.Names: yellowgreen :: (Ord a, Floating a) => Colour a
+ Data.Colour: black :: (Num a) => Colour a
+ Data.Colour.CIE: cieLAB :: (Ord a, Floating a) => Chromaticity a -> a -> a -> a -> Colour a
+ Data.Colour.CIE: cieLABView :: (Ord a, Floating a) => Chromaticity a -> Colour a -> (a, a, a)
+ Data.Colour.CIE: cieXYZView :: (Fractional a) => Colour a -> (a, a, a)
+ Data.Colour.CIE: lightness :: (Ord a, Floating a) => Chromaticity a -> Colour a -> a
- Data.Colour.Names: black :: (Ord a, Floating a) => Colour a
+ Data.Colour.Names: black :: (Num a) => Colour a
Files
- CHANGELOG +7/−1
- Data/Colour.hs +1/−0
- Data/Colour/CIE.hs +49/−18
- Data/Colour/Internal.hs +7/−2
- Data/Colour/Names.hs +156/−4
- Data/Colour/RGB.hs +5/−0
- Data/Colour/SRGB.hs +1/−7
- Data/Colour/SRGB/Linear.hs +2/−1
- LICENSE +1/−1
- Tests.hs +11/−4
- colour.cabal +3/−2
CHANGELOG view
@@ -1,2 +1,8 @@+New in version 2.3:++- black exported by Data.Colour++- CIELAB conversion functions+ New in version 2.2.1:- - Additional Documenation + - Additional Documenation
Data/Colour.hs view
@@ -108,6 +108,7 @@ -- *Colour type Colour ,colourConvert+ ,black ,AlphaColour ,opaque, withOpacity
Data/Colour/CIE.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy@@ -24,7 +24,8 @@ -- Illumination (CIE). module Data.Colour.CIE (Colour- ,cieXYZ, toCIEXYZ, luminance+ ,cieXYZ, cieXYZView, luminance+ ,toCIEXYZ -- depricated ,Chromaticity ,mkChromaticity, chromaCoords@@ -32,7 +33,7 @@ ,chromaConvert ,chromaColour - --,lightness, cieLab, cieLuv+ ,lightness, cieLABView, cieLAB --cieLuv ) where @@ -51,15 +52,18 @@ [r,g,b] = mult matrix [x,y,z] matrix = map (map fromRational) xyz2rgb709 --- |Return the XYZ colour coordinates for the 2° standard+-- |Returns the XYZ colour coordinates for the 2° standard -- (colourimetric) observer.-toCIEXYZ :: (Fractional a) => Colour a -> (a,a,a)-toCIEXYZ c = (x,y,z)+cieXYZView :: (Fractional a) => Colour a -> (a,a,a)+cieXYZView c = (x,y,z) where RGB r g b = toRGB c [x,y,z] = mult matrix [r,g,b] matrix = map (map fromRational) rgb7092xyz +{-# DEPRECATED toCIEXYZ "`toCIEXYZ' has been renamed `cieXYZView'" #-}+toCIEXYZ x = cieXYZView x+ {- CIE luminance -} -- |Returns the Y colour coordinate (luminance) for the 2° standard -- (colourimetric) observer.@@ -86,28 +90,56 @@ (ch_x, ch_y, ch_z) = chromaCoords ch s = y/ch_y --- |Returns the lightness of a colour, which is a perceptually uniform--- measure.-lightness :: (Ord a, Floating a) => Colour a -> a-lightness c | (6/29)^3 < y = 116*y**(1/3) - 16- | otherwise = (29/3)^3*y+-- |Returns the lightness of a colour with respect to a given white point.+-- Lightness is a perceptually uniform measure.+lightness :: (Ord a, Floating a) => Chromaticity a -- ^White point+ -> Colour a -> a+lightness white_ch c | (6/29)^3 < y' = 116*y'**(1/3) - 16+ | otherwise = (29/3)^3*y' where- y = luminance c+ white = chromaColour white_ch 1.0+ y' = (luminance c/luminance white) -- |Returns the CIELAB coordinates of a colour, which is a -- perceptually uniform colour space.+-- The first coordinate is 'lightness'. -- If you don't know what white point to use, use -- 'Data.Colour.CIE.Illuminant.d65'.-cieLab :: (Ord a, Floating a) => Chromaticity a -- ^White point+cieLABView :: (Ord a, Floating a) => Chromaticity a -- ^White point -> Colour a -> (a,a,a)-cieLab white_ch c = (lightness c, a, b)+cieLABView white_ch c = (lightness white_ch c, a, b) where white = chromaColour white_ch 1.0 (x,y,z) = toCIEXYZ c (xn,yn,zn) = toCIEXYZ white- a = 500*((x/xn)**(1/3) - (y/yn)**(1/3))- b = 200*((y/yn)**(1/3) - (z/zn)**(1/3))+ (fx, fy, fz) = (f (x/xn), f (y/yn), f (z/zn))+ a = 500*(fx - fy)+ b = 200*(fy - fz)+ f x | (6/29)^3 < x = x**(1/3)+ | otherwise = 841/108*x + 4/29 +-- |Returns the colour for given CIELAB coordinates, which is a+-- perceptually uniform colour space.+-- If you don't know what white point to use, use+-- 'Data.Colour.CIE.Illuminant.d65'.+cieLAB :: (Ord a, Floating a) => Chromaticity a -- ^White point+ -> a -- ^L* coordinate (lightness)+ -> a -- ^a* coordinate+ -> a -- ^b* coordinate+ -> Colour a+cieLAB white_ch l a b = cieXYZ (xn*transform fx)+ (yn*transform fy)+ (zn*transform fz)+ where+ white = chromaColour white_ch 1.0+ (xn,yn,zn) = toCIEXYZ white+ fx = fy + a/500+ fy = (l + 16)/116+ fz = fy - b/200+ delta = 6/29+ transform fa | fa > delta = fa^3+ | otherwise = (fa - 16/116)*3*delta^2+ -- |Returns the CIELUV coordinates of a colour, which is a -- perceptually uniform colour space. -- If you don't know what white point to use, use@@ -119,7 +151,7 @@ white = chromaColour white_ch 1.0 (u', v') = u'v' c (un', vn') = u'v' white- l = lightness c+ l = lightness white_ch c -------------------------------------------------------------------------- {- not for export -} u'v' :: (Ord a, Floating a) => Colour a -> (a,a)@@ -130,4 +162,3 @@ rgb7092xyz = (rgb2xyz sRGBGamut) xyz2rgb709 = inverse rgb7092xyz-
Data/Colour/Internal.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy@@ -48,8 +48,13 @@ colourConvert (RGB r g b) = RGB (Chan.convert r) (Chan.convert g) (Chan.convert b) +-- |'black' is the colourless colour. It is the identity colour in+-- additive colour spaces.+black :: (Num a) => Colour a+black = RGB Chan.empty Chan.empty Chan.empty+ instance (Num a) => Monoid (Colour a) where- mempty = RGB Chan.empty Chan.empty Chan.empty+ mempty = black (RGB r1 g1 b1) `mappend` (RGB r2 g2 b2) = RGB (r1 `Chan.add` r2) (g1 `Chan.add` g2) (b1 `Chan.add` b2) mconcat l = RGB (Chan.sum lr) (Chan.sum lg) (Chan.sum lb)
Data/Colour/Names.hs view
@@ -1,5 +1,6 @@+{-# OPTIONS_HADDOCK prune #-} {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy@@ -28,10 +29,162 @@ -- 'readColourName' takes a string naming a colour (must be all lowercase) -- and returns the colour. -- Fails if the name is not recognized.-module Data.Colour.Names where+module Data.Colour.Names + (+ readColourName+ ,aliceblue+ ,antiquewhite+ ,aqua+ ,aquamarine+ ,azure+ ,beige+ ,bisque+ ,black+ ,blanchedalmond+ ,blue+ ,blueviolet+ ,brown+ ,burlywood+ ,cadetblue+ ,chartreuse+ ,chocolate+ ,coral+ ,cornflowerblue+ ,cornsilk+ ,crimson+ ,cyan+ ,darkblue+ ,darkcyan+ ,darkgoldenrod+ ,darkgray+ ,darkgreen+ ,darkgrey+ ,darkkhaki+ ,darkmagenta+ ,darkolivegreen+ ,darkorange+ ,darkorchid+ ,darkred+ ,darksalmon+ ,darkseagreen+ ,darkslateblue+ ,darkslategray+ ,darkslategrey+ ,darkturquoise+ ,darkviolet+ ,deeppink+ ,deepskyblue+ ,dimgray+ ,dimgrey+ ,dodgerblue+ ,firebrick+ ,floralwhite+ ,forestgreen+ ,fuchsia+ ,gainsboro+ ,ghostwhite+ ,gold+ ,goldenrod+ ,gray+ ,grey+ ,green+ ,greenyellow+ ,honeydew+ ,hotpink+ ,indianred+ ,indigo+ ,ivory+ ,khaki+ ,lavender+ ,lavenderblush+ ,lawngreen+ ,lemonchiffon+ ,lightblue+ ,lightcoral+ ,lightcyan+ ,lightgoldenrodyellow+ ,lightgray+ ,lightgreen+ ,lightgrey+ ,lightpink+ ,lightsalmon+ ,lightseagreen+ ,lightskyblue+ ,lightslategray+ ,lightslategrey+ ,lightsteelblue+ ,lightyellow+ ,lime+ ,limegreen+ ,linen+ ,magenta+ ,maroon+ ,mediumaquamarine+ ,mediumblue+ ,mediumorchid+ ,mediumpurple+ ,mediumseagreen+ ,mediumslateblue+ ,mediumspringgreen+ ,mediumturquoise+ ,mediumvioletred+ ,midnightblue+ ,mintcream+ ,mistyrose+ ,moccasin+ ,navajowhite+ ,navy+ ,oldlace+ ,olive+ ,olivedrab+ ,orange+ ,orangered+ ,orchid+ ,palegoldenrod+ ,palegreen+ ,paleturquoise+ ,palevioletred+ ,papayawhip+ ,peachpuff+ ,peru+ ,pink+ ,plum+ ,powderblue+ ,purple+ ,red+ ,rosybrown+ ,royalblue+ ,saddlebrown+ ,salmon+ ,sandybrown+ ,seagreen+ ,seashell+ ,sienna+ ,silver+ ,skyblue+ ,slateblue+ ,slategray+ ,slategrey+ ,snow+ ,springgreen+ ,steelblue+ ,tan+ ,teal+ ,thistle+ ,tomato+ ,turquoise+ ,violet+ ,wheat+ ,white+ ,whitesmoke+ ,yellow+ ,yellowgreen+ )+where import Prelude hiding (tan) import Data.Colour.SRGB+import Data.Colour (black) readColourName :: (Monad m, Ord a, Floating a) => String -> m (Colour a) readColourName "aliceblue" = return aliceblue@@ -205,8 +358,7 @@ bisque :: (Ord a, Floating a) => Colour a bisque = sRGB24 255 228 196 -black :: (Ord a, Floating a) => Colour a-black = sRGB24 0 0 0+-- black is reexported from Data.Colour blanchedalmond :: (Ord a, Floating a) => Colour a blanchedalmond = sRGB24 255 235 205
Data/Colour/RGB.hs view
@@ -25,6 +25,7 @@ import Data.List import Data.Colour.Matrix import Data.Colour.CIE.Chromaticity+import Control.Applicative -- |An RGB triple for an unspecified colour space. data RGB a = RGB {channelRed :: !a@@ -34,6 +35,10 @@ instance Functor RGB where fmap f (RGB r g b) = RGB (f r) (f g) (f b)++instance Applicative RGB where+ pure c = RGB c c c+ (RGB fr fg fb) <*> (RGB r g b) = RGB (fr r) (fg g) (fb b) -- |Uncurries a function expecting three r, g, b parameters. uncurryRGB :: (a -> a -> a -> b) -> RGB a -> b
Data/Colour/SRGB.hs view
@@ -1,5 +1,5 @@ {--Copyright (c) 2008,2009+Copyright (c) 2008 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy@@ -38,12 +38,6 @@ import Data.Colour.Internal (quantize) import Data.Colour.SRGB.Linear import Data.Colour.RGBSpace hiding (transferFunction)--{- a rewrite rule to think about adding.- Should I have some instance restrictions (like Word8/Word16 Float/Double)?-# RULES "sRGBBounded" - forall r g b. toSRGBBounded (sRGBBounded r g b) = RGB r g b #--} {- Non-linear colour space -} {- the sRGB transfer function approximates a gamma of about 1/2.2 -}
Data/Colour/SRGB/Linear.hs view
@@ -1,5 +1,6 @@+{-# OPTIONS_HADDOCK not-home #-} {--Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2008+Copyright (c) 2008, 2009 Russell O'Connor Permission is hereby granted, free of charge, to any person obtaining a copy
Tests.hs view
@@ -35,6 +35,7 @@ import Data.Colour.SRGB import Data.Colour.SRGB.Linear import Data.Colour.CIE+import Data.Colour.CIE.Illuminant (d65) import Data.Colour.Names --import Data.Colour.HDTV as HDTV --import qualified Data.Colour.SDTV as SDTV@@ -79,8 +80,7 @@ coarbitrary ac = coarbitrary a . coarbitrary c where a = alphaChannel ac- c = ac `over` mempty- d = opaque c `asTypeOf` ac -- to help the type sytem+ c = ac `over` black instance (Fractional a, Arbitrary a) => Arbitrary (Chromaticity a) where@@ -132,10 +132,10 @@ prop_toFromXYZ :: RColour -> Bool prop_toFromXYZ c = (cieXYZ x y z) == c where- (x,y,z) = toCIEXYZ c+ (x,y,z) = cieXYZView c prop_fromToXYZ :: Rational -> Rational -> Rational -> Bool-prop_fromToXYZ x y z = toCIEXYZ (cieXYZ x y z) == (x,y,z)+prop_fromToXYZ x y z = cieXYZView (cieXYZ x y z) == (x,y,z) -- Uses the fact that an Arbitrary colour is an sRGB24 colour. prop_toFromSRGB :: DColour -> Bool@@ -144,6 +144,12 @@ prop_fromToSRGB :: Word8 -> Word8 -> Word8 -> Bool prop_fromToSRGB r' g' b' = toSRGB24 (sRGB24 r' g' b') == RGB r' g' b' +prop_toFromLAB :: Chromaticity Double -> DColour -> Bool+prop_toFromLAB wp c = cc (cieLAB wp l a b) == cc c+ where+ (l,a,b) = cieLABView wp c+ cc = toSRGB24+ {- prop_fromToY'CbCr709 :: Word8 -> Word8 -> Word8 -> Bool prop_fromToY'CbCr709 y' cb cr =@@ -277,6 +283,7 @@ ,("XYZ-from-to", test prop_fromToXYZ) ,("sRGB-to-from", test prop_toFromSRGB) ,("sRGB-from-to", test prop_fromToSRGB)+ ,("cieLAB-to-from", test (prop_toFromLAB d65)) -- ,("Y'CbCr-709-from-to", test prop_fromToY'CbCr709) -- ,("Y'CbCr-601-from-to", test prop_fromToY'CbCr601) ,("dissolve-id", test prop_disolveId)
colour.cabal view
@@ -1,10 +1,11 @@ Name: colour-Version: 2.2.1+Version: 2.3.0 Cabal-Version: >= 1.2 License: OtherLicense License-file: LICENSE Author: Russell O'Connor Maintainer: Russell O'Connor <roconnor@theorem.ca>+Homepage: http://www.haskell.org/haskellwiki/Colour Build-Type: Simple Category: data, graphics Synopsis: A model for human colour/color perception@@ -17,7 +18,7 @@ data-files: README CHANGELOG Library- Build-Depends: base+ Build-Depends: base >= 3 && < 5 Exposed-Modules: Data.Colour Data.Colour.SRGB Data.Colour.SRGB.Linear