{-# LANGUAGE CPP #-}
module Data.Bitmap.Pure
(
module Data.Bitmap.Base
, emptyBitmap
, cloneBitmap
, emptyCloneBitmap
, createSingleChannelBitmap
, bitmapFromForeignPtrUnsafe
, withBitmap
, componentMap
, componentMap'
, copySubImage
, copySubImage'
, flipBitmap
, mirrorBitmap
, castBitmap
, combineChannels
, extractChannels
, extractSingleChannel
, bilinearResample
, bilinearResampleChannel
, blendBitmaps
, blendChannels
, powerlawGammaCorrection
, powerlawGammaCorrectionChannel
)
where
import Data.Word
import Data.ByteString (ByteString)
import qualified Data.ByteString as B
import qualified Data.ByteString.Internal as B
import Data.Bitmap.Base
import Data.Bitmap.Internal
import qualified Data.Bitmap.IO as IO
import System.IO.Unsafe
emptyBitmap
:: PixelComponent t
=> Size
-> NChn
-> Maybe Alignment
-> Bitmap t
emptyBitmap :: Size -> NChn -> Maybe NChn -> Bitmap t
emptyBitmap Size
siz NChn
nchn Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$ Size -> NChn -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
Size -> NChn -> Maybe NChn -> IO (IOBitmap t)
IO.newIOBitmap Size
siz NChn
nchn Maybe NChn
malign
createSingleChannelBitmap
:: PixelComponent t
=> Size
-> Maybe Alignment
-> (Int -> Int -> t)
-> Bitmap t
createSingleChannelBitmap :: Size -> Maybe NChn -> (NChn -> NChn -> t) -> Bitmap t
createSingleChannelBitmap Size
siz Maybe NChn
maling NChn -> NChn -> t
fun = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
Size -> Maybe NChn -> (NChn -> NChn -> t) -> IO (IOBitmap t)
forall t.
PixelComponent t =>
Size -> Maybe NChn -> (NChn -> NChn -> t) -> IO (IOBitmap t)
IO.createSingleChannelBitmap Size
siz Maybe NChn
maling NChn -> NChn -> t
fun
emptyCloneBitmap
:: PixelComponent t
=> Bitmap t
-> Maybe Alignment
-> Bitmap t
emptyCloneBitmap :: Bitmap t -> Maybe NChn -> Bitmap t
emptyCloneBitmap Bitmap t
bm1 Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
IO.emptyCloneBitmap (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) Maybe NChn
malign
cloneBitmap
:: PixelComponent t
=> Bitmap t
-> Maybe Alignment
-> Bitmap t
cloneBitmap :: Bitmap t -> Maybe NChn -> Bitmap t
cloneBitmap Bitmap t
bm1 Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
IO.cloneBitmap (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) Maybe NChn
malign
componentMap :: PixelComponent s => (s -> s) -> Bitmap s -> Bitmap s
componentMap :: (s -> s) -> Bitmap s -> Bitmap s
componentMap s -> s
f Bitmap s
bm = IOBitmap s -> Bitmap s
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap s -> Bitmap s) -> IOBitmap s -> Bitmap s
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap s) -> IOBitmap s
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap s) -> IOBitmap s) -> IO (IOBitmap s) -> IOBitmap s
forall a b. (a -> b) -> a -> b
$
(s -> s) -> IOBitmap s -> IO (IOBitmap s)
forall s.
PixelComponent s =>
(s -> s) -> IOBitmap s -> IO (IOBitmap s)
IO.componentMap s -> s
f (Bitmap s -> IOBitmap s
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap s
bm)
componentMap' :: (PixelComponent s, PixelComponent t) => (s -> t) -> Bitmap s -> Maybe Alignment -> Bitmap t
componentMap' :: (s -> t) -> Bitmap s -> Maybe NChn -> Bitmap t
componentMap' s -> t
f Bitmap s
bm Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
(s -> t) -> IOBitmap s -> Maybe NChn -> IO (IOBitmap t)
forall s t.
(PixelComponent s, PixelComponent t) =>
(s -> t) -> IOBitmap s -> Maybe NChn -> IO (IOBitmap t)
IO.componentMap' s -> t
f (Bitmap s -> IOBitmap s
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap s
bm) Maybe NChn
malign
copySubImage
:: PixelComponent t
=> Bitmap t
-> Offset
-> Size
-> Bitmap t
copySubImage :: Bitmap t -> Size -> Size -> Bitmap t
copySubImage Bitmap t
bm Size
ofs Size
siz = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Size -> Size -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Size -> Size -> IO (IOBitmap t)
IO.copySubImage (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Size
ofs Size
siz
copySubImage'
:: PixelComponent t
=> Bitmap t
-> Offset
-> Size
-> Size
-> Offset
-> Bitmap t
copySubImage' :: Bitmap t -> Size -> Size -> Size -> Size -> Bitmap t
copySubImage' Bitmap t
bm1 Size
ofs1 Size
rsiz Size
tsiz Size
ofs2 = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Size -> Size -> Size -> Size -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Size -> Size -> Size -> Size -> IO (IOBitmap t)
IO.copySubImage' (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) Size
ofs1 Size
rsiz Size
tsiz Size
ofs2
flipBitmap
:: PixelComponent t
=> Bitmap t
-> Maybe Alignment
-> Bitmap t
flipBitmap :: Bitmap t -> Maybe NChn -> Bitmap t
flipBitmap Bitmap t
bm Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$ IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
IO.flipBitmap (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Maybe NChn
malign
mirrorBitmap
:: PixelComponent t
=> Bitmap t
-> Maybe Alignment
-> Bitmap t
mirrorBitmap :: Bitmap t -> Maybe NChn -> Bitmap t
mirrorBitmap Bitmap t
bm Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$ IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
IO.mirrorBitmap (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Maybe NChn
malign
castBitmap
:: (PixelComponent s, PixelComponent t)
=> Bitmap s
-> Maybe Alignment
-> Bitmap t
castBitmap :: Bitmap s -> Maybe NChn -> Bitmap t
castBitmap Bitmap s
bm1 Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap s -> Maybe NChn -> IO (IOBitmap t)
forall s t.
(PixelComponent s, PixelComponent t) =>
IOBitmap s -> Maybe NChn -> IO (IOBitmap t)
IO.castBitmap (Bitmap s -> IOBitmap s
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap s
bm1) Maybe NChn
malign
extractSingleChannel
:: PixelComponent t
=> Bitmap t
-> Maybe Alignment
-> Int
-> Bitmap t
Bitmap t
bm1 Maybe NChn
malign NChn
j = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Maybe NChn -> NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> NChn -> IO (IOBitmap t)
IO.extractSingleChannel (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) Maybe NChn
malign NChn
j
extractChannels :: PixelComponent t => Bitmap t -> Maybe Alignment -> [Bitmap t]
Bitmap t
bm Maybe NChn
malign = (IOBitmap t -> Bitmap t) -> [IOBitmap t] -> [Bitmap t]
forall a b. (a -> b) -> [a] -> [b]
map IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap ([IOBitmap t] -> [Bitmap t]) -> [IOBitmap t] -> [Bitmap t]
forall a b. (a -> b) -> a -> b
$ IO [IOBitmap t] -> [IOBitmap t]
forall a. IO a -> a
unsafePerformIO (IO [IOBitmap t] -> [IOBitmap t])
-> IO [IOBitmap t] -> [IOBitmap t]
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Maybe NChn -> IO [IOBitmap t]
forall t.
PixelComponent t =>
IOBitmap t -> Maybe NChn -> IO [IOBitmap t]
IO.extractChannels (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Maybe NChn
malign
combineChannels :: PixelComponent t => [Bitmap t] -> Maybe Alignment -> Bitmap t
combineChannels :: [Bitmap t] -> Maybe NChn -> Bitmap t
combineChannels [Bitmap t]
bms Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
[IOBitmap t] -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
[IOBitmap t] -> Maybe NChn -> IO (IOBitmap t)
IO.combineChannels ((Bitmap t -> IOBitmap t) -> [Bitmap t] -> [IOBitmap t]
forall a b. (a -> b) -> [a] -> [b]
map Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap [Bitmap t]
bms) Maybe NChn
malign
bilinearResample
:: PixelComponent t
=> Bitmap t
-> Size
-> Maybe Alignment
-> Bitmap t
bilinearResample :: Bitmap t -> Size -> Maybe NChn -> Bitmap t
bilinearResample Bitmap t
bm Size
siz Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> Size -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> Size -> Maybe NChn -> IO (IOBitmap t)
IO.bilinearResample (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Size
siz Maybe NChn
malign
bilinearResampleChannel
:: PixelComponent t
=> Bitmap t
-> Int
-> Size
-> Maybe Alignment
-> Bitmap t
bilinearResampleChannel :: Bitmap t -> NChn -> Size -> Maybe NChn -> Bitmap t
bilinearResampleChannel Bitmap t
bm NChn
j Size
siz Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
IOBitmap t -> NChn -> Size -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
IOBitmap t -> NChn -> Size -> Maybe NChn -> IO (IOBitmap t)
IO.bilinearResampleChannel (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) NChn
j Size
siz Maybe NChn
malign
blendBitmaps
:: PixelComponent t
=> Float
-> Float
-> Bitmap t
-> Bitmap t
-> Maybe Alignment
-> Bitmap t
blendBitmaps :: Float -> Float -> Bitmap t -> Bitmap t -> Maybe NChn -> Bitmap t
blendBitmaps Float
w1 Float
w2 Bitmap t
bm1 Bitmap t
bm2 Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
Float
-> Float
-> IOBitmap t
-> IOBitmap t
-> Maybe NChn
-> IO (IOBitmap t)
forall t.
PixelComponent t =>
Float
-> Float
-> IOBitmap t
-> IOBitmap t
-> Maybe NChn
-> IO (IOBitmap t)
IO.blendBitmaps Float
w1 Float
w2 (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm2) Maybe NChn
malign
blendChannels
:: PixelComponent t
=> Float
-> Float
-> Bitmap t
-> Int
-> Bitmap t
-> Int
-> Maybe Alignment
-> Bitmap t
blendChannels :: Float
-> Float
-> Bitmap t
-> NChn
-> Bitmap t
-> NChn
-> Maybe NChn
-> Bitmap t
blendChannels Float
w1 Float
w2 Bitmap t
bm1 NChn
ofs1 Bitmap t
bm2 NChn
ofs2 Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
Float
-> Float
-> IOBitmap t
-> NChn
-> IOBitmap t
-> NChn
-> Maybe NChn
-> IO (IOBitmap t)
forall t.
PixelComponent t =>
Float
-> Float
-> IOBitmap t
-> NChn
-> IOBitmap t
-> NChn
-> Maybe NChn
-> IO (IOBitmap t)
IO.blendChannels Float
w1 Float
w2 (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm1) NChn
ofs1 (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm2) NChn
ofs2 Maybe NChn
malign
powerlawGammaCorrection
:: PixelComponent t
=> Float
-> Bitmap t
-> Maybe Alignment
-> Bitmap t
powerlawGammaCorrection :: Float -> Bitmap t -> Maybe NChn -> Bitmap t
powerlawGammaCorrection Float
gamma Bitmap t
bm Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
Float -> IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
Float -> IOBitmap t -> Maybe NChn -> IO (IOBitmap t)
IO.powerlawGammaCorrection Float
gamma (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) Maybe NChn
malign
powerlawGammaCorrectionChannel
:: PixelComponent t
=> Float
-> Bitmap t
-> Int
-> Maybe Alignment
-> Bitmap t
powerlawGammaCorrectionChannel :: Float -> Bitmap t -> NChn -> Maybe NChn -> Bitmap t
powerlawGammaCorrectionChannel Float
gamma Bitmap t
bm NChn
j Maybe NChn
malign = IOBitmap t -> Bitmap t
forall t. IOBitmap t -> Bitmap t
unIOBitmap (IOBitmap t -> Bitmap t) -> IOBitmap t -> Bitmap t
forall a b. (a -> b) -> a -> b
$ IO (IOBitmap t) -> IOBitmap t
forall a. IO a -> a
unsafePerformIO (IO (IOBitmap t) -> IOBitmap t) -> IO (IOBitmap t) -> IOBitmap t
forall a b. (a -> b) -> a -> b
$
Float -> IOBitmap t -> NChn -> Maybe NChn -> IO (IOBitmap t)
forall t.
PixelComponent t =>
Float -> IOBitmap t -> NChn -> Maybe NChn -> IO (IOBitmap t)
IO.powerlawGammaCorrectionChannel Float
gamma (Bitmap t -> IOBitmap t
forall t. Bitmap t -> IOBitmap t
IOBitmap Bitmap t
bm) NChn
j Maybe NChn
malign