Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Reading and writing uncompressed BMP files.
Supports uncompressed 24bit RGB and 32bit RGBA WindowsV3, WindowsV4 and WindowsV5 formats.
We don't support the plain OS/2 BitmapCoreHeader and BitmapCoreHeader2 image headers, but I haven't yet seen one of these in the wild.
To write a file do something like:
do let rgba = Data.ByteString.pack [some list of Word8s] let bmp = packRGBA32ToBMP width height rgba writeBMP fileName bmp
To read a file do something like:
do Right bmp <- readBMP fileName let rgba = unpackBMPToRGBA32 bmp let (width, height) = bmpDimensions bmp ...
Release Notes:
* bmp 1.2.5 Add support for writing uncompressed 32-bit files. * bmp 1.2.4 Update to use binary 0.6. * bmp 1.2.3 Add pure parseBMP / renderBMP API. * bmp 1.2.2 Allow the physical image buffer to be larger than the image size stated in the header, to accept output of foolish Win7 codec.
Synopsis
- data BMP = BMP {}
- data FileHeader = FileHeader {}
- data BitmapInfo
- data BitmapInfoV3 = BitmapInfoV3 {}
- data BitmapInfoV4 = BitmapInfoV4 {}
- data BitmapInfoV5 = BitmapInfoV5 {}
- data Compression
- data CIEXYZ = CIEXYZ Word32 Word32 Word32
- data Error
- = ErrorBadMagic {
- errorMagic :: Word16
- | ErrorFileHeaderTruncated
- | ErrorImageHeaderTruncated
- | ErrorImageDataTruncated { }
- | ErrorReservedFieldNotZero
- | ErrorDodgyFileHeaderFieldOffset { }
- | ErrorUnhandledBitmapHeaderSize { }
- | ErrorUnhandledPlanesCount { }
- | ErrorUnhandledColorDepth { }
- | ErrorUnhandledCompressionMode { }
- | ErrorImagePhysicalSizeMismatch { }
- | ErrorInternalErrorPleaseReport
- = ErrorBadMagic {
- readBMP :: FilePath -> IO (Either Error BMP)
- hGetBMP :: Handle -> IO (Either Error BMP)
- parseBMP :: ByteString -> Either Error BMP
- writeBMP :: FilePath -> BMP -> IO ()
- hPutBMP :: Handle -> BMP -> IO ()
- renderBMP :: BMP -> ByteString
- packRGBA32ToBMP :: Int -> Int -> ByteString -> BMP
- packRGBA32ToBMP32 :: Int -> Int -> ByteString -> BMP
- packRGBA32ToBMP24 :: Int -> Int -> ByteString -> BMP
- unpackBMPToRGBA32 :: BMP -> ByteString
- bmpDimensions :: BMP -> (Int, Int)
Data Structures
A BMP image. For an uncompressed image, the image data contains triples of BGR component values. Each line may also have zero pad values on the end, to bring them up to a multiple of 4 bytes in length.
data FileHeader Source #
BMP file header.
FileHeader | |
|
Instances
Show FileHeader Source # | |
Defined in Codec.BMP.FileHeader showsPrec :: Int -> FileHeader -> ShowS # show :: FileHeader -> String # showList :: [FileHeader] -> ShowS # | |
Binary FileHeader Source # | |
Defined in Codec.BMP.FileHeader |
data BitmapInfo Source #
A wrapper for the various image header types.
Instances
Show BitmapInfo Source # | |
Defined in Codec.BMP.BitmapInfo showsPrec :: Int -> BitmapInfo -> ShowS # show :: BitmapInfo -> String # showList :: [BitmapInfo] -> ShowS # | |
Binary BitmapInfo Source # | |
Defined in Codec.BMP.BitmapInfo |
data BitmapInfoV3 Source #
Device Independent Bitmap (DIB) header for Windows V3.
BitmapInfoV3 | |
|
Instances
Show BitmapInfoV3 Source # | |
Defined in Codec.BMP.BitmapInfoV3 showsPrec :: Int -> BitmapInfoV3 -> ShowS # show :: BitmapInfoV3 -> String # showList :: [BitmapInfoV3] -> ShowS # | |
Binary BitmapInfoV3 Source # | |
Defined in Codec.BMP.BitmapInfoV3 |
data BitmapInfoV4 Source #
Device Independent Bitmap (DIB) header for Windows V4 (95 and newer)
BitmapInfoV4 | |
|
Instances
Show BitmapInfoV4 Source # | |
Defined in Codec.BMP.BitmapInfoV4 showsPrec :: Int -> BitmapInfoV4 -> ShowS # show :: BitmapInfoV4 -> String # showList :: [BitmapInfoV4] -> ShowS # | |
Binary BitmapInfoV4 Source # | |
Defined in Codec.BMP.BitmapInfoV4 |
data BitmapInfoV5 Source #
Device Independent Bitmap (DIB) header for Windows V5 (98/2000 and newer)
BitmapInfoV5 | |
|
Instances
Show BitmapInfoV5 Source # | |
Defined in Codec.BMP.BitmapInfoV5 showsPrec :: Int -> BitmapInfoV5 -> ShowS # show :: BitmapInfoV5 -> String # showList :: [BitmapInfoV5] -> ShowS # | |
Binary BitmapInfoV5 Source # | |
Defined in Codec.BMP.BitmapInfoV5 |
data Compression Source #
The Compression mode says how the image data is encoded in the file.
CompressionRGB | |
CompressionRLE8 | |
CompressionRLE4 | |
CompressionBitFields | |
CompressionJPEG | |
CompressionPNG | |
CompressionUnknown Word32 |
Instances
Show Compression Source # | |
Defined in Codec.BMP.Compression showsPrec :: Int -> Compression -> ShowS # show :: Compression -> String # showList :: [Compression] -> ShowS # | |
Binary Compression Source # | |
Defined in Codec.BMP.Compression | |
Eq Compression Source # | |
Defined in Codec.BMP.Compression (==) :: Compression -> Compression -> Bool # (/=) :: Compression -> Compression -> Bool # |
Contains the XYZ coordinates of a specific color in a specified color space.
Things that can go wrong when loading a BMP file.
ErrorBadMagic | Magic number was not at the start of the file, so this probably isn't a BMP file. |
| |
ErrorFileHeaderTruncated | File is too short to contain a file header. |
ErrorImageHeaderTruncated | File is too short to contain an image header. |
ErrorImageDataTruncated | File is too short to contain the image data. |
ErrorReservedFieldNotZero | Reserved fields should be zero. |
ErrorDodgyFileHeaderFieldOffset | The offset to the image data from the file header doesn't point anywhere sensible. |
ErrorUnhandledBitmapHeaderSize | We handle V3 V4 and V5 image headers, but the size of the header indicates it has some other format. |
ErrorUnhandledPlanesCount | We only handle single color planes. |
ErrorUnhandledColorDepth | We only handle 24 and 32 bit images. |
ErrorUnhandledCompressionMode | We only handle uncompressed images. |
ErrorImagePhysicalSizeMismatch | Mismatch between the image size stated in the header and that which is calculuated from the other fields. |
ErrorInternalErrorPleaseReport | Something went wrong in the library. |
Reading
readBMP :: FilePath -> IO (Either Error BMP) Source #
Read a BMP from a file.
The file is checked for problems and unsupported features when read.
If there is anything wrong this gives an Error
instead.
parseBMP :: ByteString -> Either Error BMP Source #
Parse a BMP image from a lazy ByteString
Writing
renderBMP :: BMP -> ByteString Source #
Render a BMP image to a lazy ByteString
.
Pack and Unpack
:: Int | Width of image (must be positive). |
-> Int | Height of image (must be positive). |
-> ByteString | A string of RGBA component values.
Must have length ( |
-> BMP |
Pack a string of RGBA component values into a 32-bit BMP image.
Alias for packRGBA32ToBMP32
.
:: Int | Width of image (must be positive). |
-> Int | Height of image (must be positive). |
-> ByteString | A string of RGBA component values.
Must have length ( |
-> BMP |
:: Int | Width of image (must be positive). |
-> Int | Height of image (must be positive). |
-> ByteString | A string of RGBA component values.
Must have length ( |
-> BMP |
unpackBMPToRGBA32 :: BMP -> ByteString Source #
Unpack a BMP image to a string of RGBA component values.