Data::parsebinary::graphics::bmp
use Data::ParseBinary::Graphics::BMP qw{$bmp_parser}; my $data = $bmp_parser->parse(CreateStreamReader(File => $fh));
Can parse / build any \s-1BMP\s0 file, (1, 4, 8 or 24 bit) as long as \s-1RLE\s0 is not used.
This is a part of the Data::ParseBinary package, and is just one ready-made parser. please go to the main page for additional usage info.