Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
66 lines (54 sloc) 1.33 KB
use strict;
use Getopt::Long;
my $dumpall = 0;
my $image = 0;
GetOptions(dumpall => \$dumpall,
image => \$image);
my $file = shift
or die "Usage: $0 filename\n";
open my $fh, "<", $file
or die "$0: cannot open '$file': $!\n";
binmode $fh;
my $filehead;
read($fh, $filehead, 14) == 14
or die "Could not read file header: $!\n";
my ($h_type, $h_size, $res1, $res2, $h_offset)
= unpack("A2VvvV", $filehead);
$h_type eq "BM"
or die "Not a BMP file - no BM signature\n";
print <<EOS;
File header:
Type: $h_type
Size: $h_size
Res1: $res1
Res2: $res2
Offset: $h_offset
my $bmi;
read($fh, $bmi, 40) == 40
or die "Could not read BITMAPINFO\n";
my ($i_size, $i_width, $i_height, $i_planes, $i_bits, $i_compress, $i_size_img, $i_xppm, $i_yppm, $clr_used, $clr_imp) =
unpack("VVVvvVVVVVV", $bmi);
printf <<EOS,
biSize: %d
biWidth: %d
biHeight: %d
biPlanes: %d
biBitCount: %d
biCompression: %d
biSizeImage: %d
biXPelsPerMeter: %d
biYPelsPerMeter: %d
biClrUsed: %d
biClrImportant: %d
$i_size, $i_width, $i_height, $i_planes, $i_bits, $i_compress, $i_size_img, $i_xppm, $i_yppm, $clr_used, $clr_imp;
$i_size < 40
and die "biSize too small\n";
if ($i_size > 40) {
my $extra_head;
read($fh, $extra_head, $i_size - 40) == $i_size - 40
or die "Failed to read rest of header\n";
Something went wrong with that request. Please try again.