lj      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Infered LA mutable Bitmap in the ST Monad. Only the content is mutable, the shape isn't. LA mutable Bitmap in the IO Monad. Only the content is mutable, the shape isn't.  A bitmap. (width,height) #number of channels (eg. 3 for RGB) pointer to the data %the padding of the rows, measured in bytes %the alignment of the rows (in bytes) .A class so that using newtypes is convenient. !The width divided by the height. ! withBitmap bitmap $ \(w,h) nchn padding ptr -> ...C  !";  !".     !" Safe-Infered      Safe-Infered% Note: we cannot guarantee the alignment V of the memory block (but typically it is aligned at least to machine word boundary),  but what we can1 guarantee is that the rows are properly padded. SAt the moment, the default alignment is 4, valid alignments are 1, 2, 4, 8 and 16, W and the padding method is compatible with the OpenGL one (that is, the padding is the K smallest multiple of a component size such that the next row is aligned). /The resulting new bitmap is filled with zeros. 'ICreates a new single-channel bitmap, using the given function to compute  the pixel values. # Warning, this is probably slow! * withIOBitmap bitmap $ \(w,h) nchn padding ptr -> ...+SMaps a function over each component of each pixel. Warning: this is probably slow! ; Use a specialized function if there is one for your task. .Clones a bitmap. /@Creates an empty bitmap with the same properties as the source. 0 Synonym for % 1>Copies a subrectangle of the source image into a new image. 2Copy into a new "black"3 bitmap; common generalization of crop and extend. 3DThe source rectangle may be arbitrary, may or may not intersect the I source image in any way. We only copy the intersection of the rectangle  with the image. 49Convert a bitmap to one with a different component type. 5Flips the bitmap vertically. 7Flips the bitmap horizontally. @This is equivalent to componentMap (c -> c^gamma), except that  (^)F is defined only for integral exponents; but should be faster anyway. CBBlends two bitmaps with the given weights; that is, the result is I the specified linear combination. If the values are outside the allowed I range (this can happen with the Word8, Word16, Word32 types and weights G whose sum is bigger than 1, or with a negative weight), then they are  clipped. The clipping does not' happen with the Float component type. ##$%(width,height) number of channels (components/pixel) #the row alignment of the new image &'(width,height) #the row alignment of the new image ,the function we will use to fill the bitmap ((width,height) of the source "number of channels in the source source padding  the source target alignment )*+,-source bitmap &row alignment of the resulting bitmap . source image target alignment /*source (only dimensions and such is used) target alignment new empty bitmap 0(width,height) number of channels (components/pixel) #the row alignment of the new image 1 source image source rectangle offset source rectangle size 2 source image source rectangle offset source rectangle size target image size target rectangle offset 3 source image source rectangle offset source rectangle size  target image target rectangle offset 4 source image target image row alignment 5 source image target image row alignment 6 source image 7 source image target image row alignment 8 source image 9 source image target image row alignment source channel index :;< source image source channel index  target image target channel index = source image target image size target image alignment > source image source channel index target image size target image alignment ? source image source channel index  target image target channel index @gamma source bitmap target alignment Agamma  source image source channel index target image alignment Bgamma  source image source channel index  target image target channel index Cweight1 weight2 source1 image source2 image target alignment Dweight1 weight2 source1 image source1 channel index source2 image source2 channel index target alignment Eweight1 weight2 source1 image source1 channel index source2 image source2 channel index  target image target channel index D  #$%&'()*+,-./0123456789:;<=>?@ABCDE% #$0./'%&()*+-,12356784;:9<=>?CDE@AB##$%&'()*+,-./0123456789:;<=>?@ABCDE Safe-Infered F"A bitmap filled with zero values.  Note: we cannot guarantee the alignment V of the memory block (but typically it is aligned at least to machine word boundary),  but what we can1 guarantee is that the rows are properly padded. G1Creates a single channel bitmap from a function.  This is probably a bit slow. H@Creates an empty bitmap with the same properties as the source. I6Clones a bitmap. The only effect of this in the pure % setting should be that the alignment/padding can change.  You shouldn't normally use this function. J Warning: this is probably slow. K Warning: this is probably slow. L>Copies a subrectangle of the source image into a new image. MCopy into a new "black"3 bitmap; common generalization of crop and extend. NFlips the bitmap vertically. OFlips the bitmap horizontally. P,Converts between different component types. VBBlends two bitmaps with the given weights; that is, the result is I the specified linear combination. If the values are outside the allowed I range (this can happen with the Word8, Word16, Word32 types and weights G whose sum is bigger than 1, or with a negative weight), then they are  clipped. The clipping does not' happen with the Float component type. XThis is equivalent to componentMap (c -> c^gamma), except that  (^)F is defined only for integral exponents; but should be faster anyway. F(width,height) number of channels (components/pixel) #the row alignment of the new image G(width,height) #the row alignment of the new image 'the function used to create the bitmap H*source (only dimensions and such is used) target alignment new empty bitmap I source image target alignment JKL source image source rectangle offset source rectangle size M source image source rectangle offset source rectangle size target image size target rectangle offset NOP source image target image row alignment Q source image target image row alignment source channel index RST source image target image size target image row alignment U source image source channel indexe target image size target image row alignment V weight 1  weight 2 source image 1 source image 2 target alignment W weight 1  weight 2 source image 1 channel index 1 source image 2 channel index 2 target alignment Xgamma  source image target image row alignment Ygamma  source image source channel indexe target image row alignment 5  !"FGHIJKLMNOPQRSTUVWXYFIHG"!JKLMNOPSRQTUVWXYFGHIJKLMNOPQRSTUVWXY Safe-Infered]2Saves only the raw pixel data, no resolution etc. ^1Writes a 16 byte header in the following format:   dword xsize  dword ysize  dword nchn  dword pixelcomponent_type +Pixel component encoding is the following:  1 = Word8  2 = Word16  3 = Word32  4 = Float DEndianness is the endianness of the host, so the resulting file is ; not portable across platform with different endiannesses. _2Saves only the raw pixel data, no resolution etc. Z[\]^_`aZ[\]^_`aZ\[]^_a`Z[\]^_`a Safe-Inferede2Saves only the raw pixel data, no resolution etc. bcdebcdebdcebcde Safe-InferediMNewtypes for bitmaps with a fixed number of channels (components per pixel) n It is not very efficient to read/write lots of pixels this way. o4Please note that the component array to read shouldn' t cross  the boundary between lines. fghijklmn the bitmap position (x,y) $channel index {0,1,...,nchannels-1} o the bitmap position (x,y) $channel index {0,1,...,nchannels-1} !the number of components to read p the bitmap position (x,y) qrstfghijklmnopqrstihgfjklmnopqrstfghijklmnopqrst Safe-Infered{UNewtypes for mutable bitmaps with a fixed number of channels (components per pixel) }UNote that the resulting pointer is valid only within a line (because of the padding) ~ It is not very efficient to read/write lots of pixels this way. 4Please note that the component array to read shouldn' t cross  the boundary between lines. 5Please note that the component array to write shouldn' t cross  the boundary between lines. uvwxyz{|} the bitmap position (x,y) $channel index {0,1,...,nchannels-1}  user action ~ the bitmap position (x,y) $channel index {0,1,...,nchannels-1}  the bitmap position (x,y) $channel index {0,1,...,nchannels-1} the value to write  the bitmap position (x,y) $channel index {0,1,...,nchannels-1} !the number of components to read  the bitmap position (x,y) $channel index {0,1,...,nchannels-1} the components to write  the bitmap position (x,y) uvwxyz{|}~{|yzwxuv|zxv}~uvwxyz{|}~ Safe-Infered "A bitmap filled with zero values. 1Creates a single channel bitmap from a function.  This is probably a bit slow. @Creates an empty bitmap with the same properties as the source.  Warning: this is probably slow.  Warning: this is probably slow. >Copies a subrectangle of the source image into a new image. Copy into a new "black"3 bitmap; common generalization of crop and extend. Flips the bitmap vertically. Flips the bitmap horizontally. ,Converts between different component types. BBlends two bitmaps with the given weights; that is, the result is I the specified linear combination. If the values are outside the allowed I range (this can happen with the Word8, Word16, Word32 types and weights G whose sum is bigger than 1, or with a negative weight), then they are  clipped. The clipping does not' happen with the Float component type. This is equivalent to componentMap (c -> c^gamma), except that  (^)F is defined only for integral exponents; but should be faster anyway. (width,height) number of channels (components/pixel) (width,height) 'the function used to create the bitmap *source (only dimensions and such is used) new empty bitmap  source image source rectangle offset source rectangle size  source image source rectangle offset source rectangle size target image size target rectangle offset  source image  source image source channel index  source image target image size  source image source channel indexe target image size  weight 1  weight 2 source image 1 source image 2  weight 1  weight 2 source image 1 channel index 1 source image 2 channel index 2 gamma  source image gamma  source image source channel indexe 3  !!  Safe-Infered3  !                     ! " # $ % & ' ( ) * + , - . /0123456789:;<=>?@ABCDEFGHIJKLMNOPQR=4<;8:>?BDAFGHJKPQMNSTUVWXYZSTUV[\]^_`abcdefghijklmnopqrcsdteuvwxfghiyz{|=4<8:>?BDAFGHJKPQMN } ~  }       bitmap-0.0.2Data.Bitmap.BaseData.Bitmap.IOData.Bitmap.PureData.Bitmap.IO.FileData.Bitmap.Pure.FileData.Bitmap.Pure.PixelsData.Bitmap.IO.PixelsData.Bitmap.SimpleData.Bitmap.Internal Data.BitmapbaseGHC.WordWord8Word16Word32IOBitmapBitmap AlignmentPaddingNChnOffsetSizeIOBitmapChannel BitmapChannelBmChn BitmapClassPixelComponentPixelComponentTypePctFloat PctWord32 PctWord16PctWord8pixelComponentSizepixelComponentType bitmapSizebitmapNChannelsbitmapRowPaddingbitmapRowAlignmentbitmapComponentTypebitmapComponentSizeInBytesbitmapPixelSizeInBytesbitmapUnpaddedRowSizeInBytesbitmapPaddedRowSizeInBytesbitmapSizeInBytes bitmapAspect withBitmapbitmapFromForeignPtrUnsafeunsafeFreezeBitmapunsafeThawBitmap newIOBitmapnewIOBitmapUninitializedcreateSingleChannelBitmapcopyBitmapFromPtrioBitmapFromForeignPtrUnsafe withIOBitmap componentMapcomponentMapInPlace componentMap' cloneBitmapemptyCloneBitmap emptyBitmap copySubImage copySubImage'copySubImageInto castBitmap flipBitmapflipBitmapInPlace mirrorBitmapmirrorBitmapInPlaceextractSingleChannelextractChannelscombineChannelsextractChannelIntobilinearResamplebilinearResampleChannelbilinearResampleChannelIntopowerlawGammaCorrectionpowerlawGammaCorrectionChannel"powerlawGammaCorrectionChannelInto blendBitmaps blendChannelsblendChannelsInto readBitmap readRawData writeBitmap writeRawData hPutHeader hPutRawData hGetRawData hGetHeaderBitmap4Bitmap3Bitmap2Bitmap1bitmap1bitmap2bitmap3bitmap4unsafeReadComponentunsafeReadComponentsunsafeReadPixelunsafeReadPixel1unsafeReadPixel2unsafeReadPixel3unsafeReadPixel4 IOBitmap4 fromIOBitmap4 IOBitmap3 fromIOBitmap3 IOBitmap2 fromIOBitmap2 IOBitmap1 fromIOBitmap1withComponentPtrunsafeWriteComponentunsafeWriteComponents ioBitmap1 ioBitmap2 ioBitmap3 ioBitmap4unsafeWritePixel1unsafeWritePixel2unsafeWritePixel3unsafeWritePixel4STBitmap _bitmapSize_bitmapNChannels _bitmapPtr_bitmapRowPadding_bitmapRowAlignment unSTBitmap unIOBitmapSTBitmapChannelSTBmChnIOBmChnunderlyingBitmapc_typetoFloat fromFloatprettyPrintPixelComponentType decodeCTypeclampbitmapUndefined bitmapCType bitmapPtrprettyPrintBitmapisValidAlignmentrecommendedPadding $fShowBitmap$fBitmapClassSTBitmap$fBitmapClassIOBitmap$fBitmapClassBitmap$fPixelComponentFloat$fPixelComponentWord32$fPixelComponentWord16$fPixelComponentWord8$fBitmapClassBitmap4$fBitmapClassBitmap3$fBitmapClassBitmap2$fBitmapClassBitmap1$fBitmapClassIOBitmap4$fBitmapClassIOBitmap3$fBitmapClassIOBitmap2$fBitmapClassIOBitmap1