Copyright | (c) Alexey Kuleshevich 2019-2025 |
---|---|
License | BSD3 |
Maintainer | Alexey Kuleshevich <lehins@yandex.ru> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Graphics.Pixel.ColorSpace
Description
Synopsis
- newtype Pixel cs e where
- Pixel (Color cs e)
- pattern PixelX :: e -> Pixel X e
- pattern PixelY :: e -> Pixel (Y i) e
- pattern PixelXYZ :: e -> e -> e -> Pixel (XYZ i) e
- pattern PixelLAB :: e -> e -> e -> Pixel (LAB i) e
- pattern PixelRGB :: RedGreenBlue cs (i :: k) => e -> e -> e -> Pixel (cs l) e
- pattern PixelHSI :: e -> e -> e -> Pixel (HSI cs) e
- pattern PixelHSL :: e -> e -> e -> Pixel (HSL cs) e
- pattern PixelHSV :: e -> e -> e -> Pixel (HSV cs) e
- pattern PixelCMYK :: e -> e -> e -> e -> Pixel (CMYK cs) e
- pattern PixelY'CbCr :: e -> e -> e -> Pixel (Y'CbCr cs) e
- pattern PixelY' :: e -> Pixel (Y' cs) e
- pattern PixelYA :: e -> e -> Pixel (Alpha (Y i)) e
- pattern PixelXYZA :: e -> e -> e -> e -> Pixel (Alpha (XYZ i)) e
- pattern PixelLABA :: e -> e -> e -> e -> Pixel (Alpha (LAB i)) e
- pattern PixelRGBA :: RedGreenBlue cs i => e -> e -> e -> e -> Pixel (Alpha (cs l)) e
- pattern PixelHSIA :: e -> e -> e -> e -> Pixel (Alpha (HSI cs)) e
- pattern PixelHSLA :: e -> e -> e -> e -> Pixel (Alpha (HSL cs)) e
- pattern PixelHSVA :: e -> e -> e -> e -> Pixel (Alpha (HSV cs)) e
- pattern PixelCMYKA :: e -> e -> e -> e -> e -> Pixel (Alpha (CMYK cs)) e
- pattern PixelY'CbCrA :: e -> e -> e -> e -> Pixel (Alpha (Y'CbCr cs)) e
- pattern PixelY'A :: e -> e -> Pixel (Alpha (Y' cs)) e
- liftPixel :: (Color cs e -> Color cs' e') -> Pixel cs e -> Pixel cs' e'
- pixelColor :: Pixel cs e -> Color cs e
- convertPixel :: forall cs i e cs' i' e'. (ColorSpace cs' i' e', ColorSpace cs i e) => Pixel cs' e' -> Pixel cs e
- toPixelY :: ColorSpace cs i e => Pixel cs e -> Pixel (Y i) e
- toPixelXYZ :: (ColorSpace cs i e, Elevator a, RealFloat a) => Pixel cs e -> Pixel (XYZ i) a
- fromPixelXYZ :: (ColorSpace cs i e, Elevator a, RealFloat a) => Pixel (XYZ i) a -> Pixel cs e
- toPixelBaseSpace :: (ColorSpace cs i e, bcs ~ BaseSpace cs, ColorSpace bcs i e) => Pixel cs e -> Pixel bcs e
- fromPixelBaseSpace :: (ColorSpace cs i e, bcs ~ BaseSpace cs, ColorSpace bcs i e) => Pixel bcs e -> Pixel cs e
- grayscalePixel :: ColorSpace cs i e => Pixel cs e -> Pixel X e
- applyGrayscalePixel :: ColorSpace cs i e => Pixel cs e -> (Pixel X e -> Pixel X e) -> Pixel cs e
- replaceGrayscalePixel :: ColorSpace cs i e => Pixel cs e -> Pixel X e -> Pixel cs e
- toPixelBaseModel :: ColorSpace cs i e => Pixel cs e -> Pixel (BaseModel cs) e
- fromPixelBaseModel :: ColorSpace cs i e => Pixel (BaseModel cs) e -> Pixel cs e
- toPixel8 :: ColorModel cs e => Pixel cs e -> Pixel cs Word8
- toPixel16 :: ColorModel cs e => Pixel cs e -> Pixel cs Word16
- toPixel32 :: ColorModel cs e => Pixel cs e -> Pixel cs Word32
- toPixel64 :: ColorModel cs e => Pixel cs e -> Pixel cs Word64
- toPixelF :: ColorModel cs e => Pixel cs e -> Pixel cs Float
- toPixelD :: ColorModel cs e => Pixel cs e -> Pixel cs Double
- toPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e
- fromPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e
- pattern PixelSRGB :: forall e l. e -> e -> e -> Pixel (SRGB l) e
- pattern PixelSRGBA :: e -> e -> e -> e -> Pixel (Alpha (SRGB l)) e
- rgbPixelLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e' -> Pixel (Y' cs) e
- module Graphics.Color.Space
- module Graphics.Color.Algebra.Binary
Documentation
Digital imaging is one of the most common places for a color to be used in. The smallest element in any image is a pixel, which is defined by its color.
Since: 0.1.0
Bundled Patterns
pattern PixelX :: e -> Pixel X e | Constructor for a grayscale pixel with single channel. Since: 0.1.0 |
pattern PixelY :: e -> Pixel (Y i) e | Constructor for a pixel with Luminance Since: 0.1.0 |
pattern PixelXYZ :: e -> e -> e -> Pixel (XYZ i) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelLAB :: e -> e -> e -> Pixel (LAB i) e | Constructor for a pixel in Since: 0.3.0 |
pattern PixelRGB :: RedGreenBlue cs (i :: k) => e -> e -> e -> Pixel (cs l) e | Constructor for a pixel in RGB color space. Since: 0.1.0 |
pattern PixelHSI :: e -> e -> e -> Pixel (HSI cs) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelHSL :: e -> e -> e -> Pixel (HSL cs) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelHSV :: e -> e -> e -> Pixel (HSV cs) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelCMYK :: e -> e -> e -> e -> Pixel (CMYK cs) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelY'CbCr :: e -> e -> e -> Pixel (Y'CbCr cs) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelY' :: e -> Pixel (Y' cs) e | Constructor for a pixel with Luma (not to be confused with luminance Since: 0.1.4 |
pattern PixelYA :: e -> e -> Pixel (Alpha (Y i)) e | Constructor for a pixel with Luminance and Alpha channel Since: 0.1.0 |
pattern PixelXYZA :: e -> e -> e -> e -> Pixel (Alpha (XYZ i)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelLABA :: e -> e -> e -> e -> Pixel (Alpha (LAB i)) e | Constructor for a pixel in Since: 0.3.0 |
pattern PixelRGBA :: RedGreenBlue cs i => e -> e -> e -> e -> Pixel (Alpha (cs l)) e | Constructor for a pixel in RGB color space with Alpha channel Since: 0.1.0 |
pattern PixelHSIA :: e -> e -> e -> e -> Pixel (Alpha (HSI cs)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelHSLA :: e -> e -> e -> e -> Pixel (Alpha (HSL cs)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelHSVA :: e -> e -> e -> e -> Pixel (Alpha (HSV cs)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelCMYKA :: e -> e -> e -> e -> e -> Pixel (Alpha (CMYK cs)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelY'CbCrA :: e -> e -> e -> e -> Pixel (Alpha (Y'CbCr cs)) e | Constructor for a pixel in Since: 0.1.0 |
pattern PixelY'A :: e -> e -> Pixel (Alpha (Y' cs)) e | Constructor for a pixel with Luma and Alpha channel (not to be confused with luminance Since: 0.1.4 |
Instances
ColorModel cs e => Vector Vector (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal Methods basicUnsafeFreeze :: Mutable Vector s (Pixel cs e) -> ST s (Vector (Pixel cs e)) basicUnsafeThaw :: Vector (Pixel cs e) -> ST s (Mutable Vector s (Pixel cs e)) basicLength :: Vector (Pixel cs e) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Pixel cs e) -> Vector (Pixel cs e) basicUnsafeIndexM :: Vector (Pixel cs e) -> Int -> Box (Pixel cs e) basicUnsafeCopy :: Mutable Vector s (Pixel cs e) -> Vector (Pixel cs e) -> ST s () | |
ColorModel cs e => MVector MVector (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal Methods basicLength :: MVector s (Pixel cs e) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Pixel cs e) -> MVector s (Pixel cs e) basicOverlaps :: MVector s (Pixel cs e) -> MVector s (Pixel cs e) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Pixel cs e)) basicInitialize :: MVector s (Pixel cs e) -> ST s () basicUnsafeReplicate :: Int -> Pixel cs e -> ST s (MVector s (Pixel cs e)) basicUnsafeRead :: MVector s (Pixel cs e) -> Int -> ST s (Pixel cs e) basicUnsafeWrite :: MVector s (Pixel cs e) -> Int -> Pixel cs e -> ST s () basicClear :: MVector s (Pixel cs e) -> ST s () basicSet :: MVector s (Pixel cs e) -> Pixel cs e -> ST s () basicUnsafeCopy :: MVector s (Pixel cs e) -> MVector s (Pixel cs e) -> ST s () basicUnsafeMove :: MVector s (Pixel cs e) -> MVector s (Pixel cs e) -> ST s () basicUnsafeGrow :: MVector s (Pixel cs e) -> Int -> ST s (MVector s (Pixel cs e)) | |
Foldable (Color cs) => Foldable (Pixel cs) Source # | |
Defined in Graphics.Pixel.Internal Methods fold :: Monoid m => Pixel cs m -> m # foldMap :: Monoid m => (a -> m) -> Pixel cs a -> m # foldMap' :: Monoid m => (a -> m) -> Pixel cs a -> m # foldr :: (a -> b -> b) -> b -> Pixel cs a -> b # foldr' :: (a -> b -> b) -> b -> Pixel cs a -> b # foldl :: (b -> a -> b) -> b -> Pixel cs a -> b # foldl' :: (b -> a -> b) -> b -> Pixel cs a -> b # foldr1 :: (a -> a -> a) -> Pixel cs a -> a # foldl1 :: (a -> a -> a) -> Pixel cs a -> a # elem :: Eq a => a -> Pixel cs a -> Bool # maximum :: Ord a => Pixel cs a -> a # minimum :: Ord a => Pixel cs a -> a # | |
Traversable (Color cs) => Traversable (Pixel cs) Source # | |
Applicative (Color cs) => Applicative (Pixel cs) Source # | |
Functor (Color cs) => Functor (Pixel cs) Source # | |
Storable (Color cs e) => Storable (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal Methods alignment :: Pixel cs e -> Int # peekElemOff :: Ptr (Pixel cs e) -> Int -> IO (Pixel cs e) # pokeElemOff :: Ptr (Pixel cs e) -> Int -> Pixel cs e -> IO () # peekByteOff :: Ptr b -> Int -> IO (Pixel cs e) # pokeByteOff :: Ptr b -> Int -> Pixel cs e -> IO () # | |
Bounded (Color cs e) => Bounded (Pixel cs e) Source # | |
Floating (Color cs e) => Floating (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal Methods exp :: Pixel cs e -> Pixel cs e # log :: Pixel cs e -> Pixel cs e # sqrt :: Pixel cs e -> Pixel cs e # (**) :: Pixel cs e -> Pixel cs e -> Pixel cs e # logBase :: Pixel cs e -> Pixel cs e -> Pixel cs e # sin :: Pixel cs e -> Pixel cs e # cos :: Pixel cs e -> Pixel cs e # tan :: Pixel cs e -> Pixel cs e # asin :: Pixel cs e -> Pixel cs e # acos :: Pixel cs e -> Pixel cs e # atan :: Pixel cs e -> Pixel cs e # sinh :: Pixel cs e -> Pixel cs e # cosh :: Pixel cs e -> Pixel cs e # tanh :: Pixel cs e -> Pixel cs e # asinh :: Pixel cs e -> Pixel cs e # acosh :: Pixel cs e -> Pixel cs e # atanh :: Pixel cs e -> Pixel cs e # log1p :: Pixel cs e -> Pixel cs e # expm1 :: Pixel cs e -> Pixel cs e # | |
Num (Color cs e) => Num (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal | |
Fractional (Color cs e) => Fractional (Pixel cs e) Source # | |
Show (Color cs e) => Show (Pixel cs e) Source # | |
Default (Color cs e) => Default (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal | |
NFData (Color cs e) => NFData (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal | |
Eq (Color cs e) => Eq (Pixel cs e) Source # | |
Ord (Color cs e) => Ord (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal | |
ColorModel cs e => Unbox (Pixel cs e) Source # | Unboxing of a |
Defined in Graphics.Pixel.Internal | |
newtype MVector s (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal | |
newtype Vector (Pixel cs e) Source # | |
Defined in Graphics.Pixel.Internal |
Conversion
Color space
convertPixel :: forall cs i e cs' i' e'. (ColorSpace cs' i' e', ColorSpace cs i e) => Pixel cs' e' -> Pixel cs e Source #
Convert a pixel from one color space to any other.
>>>
:set -XDataKinds
>>>
:set -XTypeApplications
>>>
px = PixelSRGB @Float @'NonLinear 0.0 0.5 1.0
>>>
px
<SRGB 'NonLinear:( 0.00000000, 0.50000000, 1.00000000)>>>>
convertPixel @(AdobeRGB 'NonLinear) @_ @Word8 px
<AdobeRGB 'NonLinear:( 71,127,251)>
Since: 0.1.0
toPixelY :: ColorSpace cs i e => Pixel cs e -> Pixel (Y i) e Source #
Compute luminance of a pixel color
Since: 0.1.0
toPixelXYZ :: (ColorSpace cs i e, Elevator a, RealFloat a) => Pixel cs e -> Pixel (XYZ i) a Source #
Convert to CIE1931 XYZ color space, with the same illuminant as the original.
Since: 0.1.0
fromPixelXYZ :: (ColorSpace cs i e, Elevator a, RealFloat a) => Pixel (XYZ i) a -> Pixel cs e Source #
Convert from CIE1931 XYZ color space, with the same illuminant as the target color space.
Since: 0.1.0
toPixelBaseSpace :: (ColorSpace cs i e, bcs ~ BaseSpace cs, ColorSpace bcs i e) => Pixel cs e -> Pixel bcs e Source #
Convert pixel in an alternative representation of color space, to its base color space. Example from CMYK to SRGB
Since: 0.1.0
fromPixelBaseSpace :: (ColorSpace cs i e, bcs ~ BaseSpace cs, ColorSpace bcs i e) => Pixel bcs e -> Pixel cs e Source #
Covert a color space of a pixel into its alternative representation. Example AdobeRGB to HSI.
Since: 0.1.0
Grayscale
grayscalePixel :: ColorSpace cs i e => Pixel cs e -> Pixel X e Source #
applyGrayscalePixel :: ColorSpace cs i e => Pixel cs e -> (Pixel X e -> Pixel X e) -> Pixel cs e Source #
Apply a function to grayscale information of a pixel leaving chroma untouched. Same
as applyGrayscale
for Color
Since: 0.4.0
replaceGrayscalePixel :: ColorSpace cs i e => Pixel cs e -> Pixel X e -> Pixel cs e Source #
Replace grayscale information in a pixel leaving chroma untouched. Same as
replaceGrayscale
for Color
Since: 0.4.0
Color model
toPixelBaseModel :: ColorSpace cs i e => Pixel cs e -> Pixel (BaseModel cs) e Source #
Drop all color space information and only keep the values encoded in the fitting color model, which the color space is backed by.
Since: 0.1.0
fromPixelBaseModel :: ColorSpace cs i e => Pixel (BaseModel cs) e -> Pixel cs e Source #
Promote a pixel without color space information to a color space that is backed by the fitting color model
Since: 0.1.0
Precision
toPixel8 :: ColorModel cs e => Pixel cs e -> Pixel cs Word8 Source #
Convert all channels of a pixel to 8bits each, while doing appropriate scaling. See
Elevator
.
Since: 0.1.0
toPixel16 :: ColorModel cs e => Pixel cs e -> Pixel cs Word16 Source #
Convert all channels of a pixel to 16bits each, while appropriate scaling. See
Elevator
.
Since: 0.1.0
toPixel32 :: ColorModel cs e => Pixel cs e -> Pixel cs Word32 Source #
Convert all channels of a pixel to 32bits each, while doing appropriate scaling. See
Elevator
.
Since: 0.1.0
toPixel64 :: ColorModel cs e => Pixel cs e -> Pixel cs Word64 Source #
Convert all channels of a pixel to 64bits each, while doing appropriate scaling. See
Elevator
.
Since: 0.1.0
toPixelF :: ColorModel cs e => Pixel cs e -> Pixel cs Float Source #
Convert all channels of a pixel to 32bit floating point numers each, while doing
appropriate scaling. See Elevator
.
Since: 0.1.0
toPixelD :: ColorModel cs e => Pixel cs e -> Pixel cs Double Source #
Convert all channels of a pixel to 64bit floating point numers each, while doing
appropriate scaling. See Elevator
.
Since: 0.1.0
RGB
toPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'NonLinear) e -> Pixel (cs 'Linear) e Source #
Convert non-linear RGB color space into linear one
Since: 0.2.0
fromPixelLinearRGB :: (RedGreenBlue cs i, RealFloat e) => Pixel (cs 'Linear) e -> Pixel (cs 'NonLinear) e Source #
Convert linear RGB color space into a non-linear one
Since: 0.2.0
sRGB color space
pattern PixelSRGB :: forall e l. e -> e -> e -> Pixel (SRGB l) e Source #
Constructor for a pixel in sRGB
color space
Since: 0.1.0
pattern PixelSRGBA :: e -> e -> e -> e -> Pixel (Alpha (SRGB l)) e Source #
Constructor for a pixel in sRGB
color space with Alpha channel
Since: 0.1.0
Luma
rgbPixelLuma :: forall cs i e' e. (Luma cs, RedGreenBlue cs i, Elevator e', Elevator e, RealFloat e) => Pixel (cs 'NonLinear) e' -> Pixel (Y' cs) e Source #
Re-export of color space
module Graphics.Color.Space