I am writing an app which, at a certain point, needs to read a .PNG
graphics file.
The .PNG file is always small, so I read the whole file (binmode) into a
scalar, and this works well.
if ($gfilesize = -s $gfilespec)
{
$GRAPHFILE = "<$gfilespec";
if (open GRAPHFILE)
{
binmode GRAPHFILE;
read GRAPHFILE, $gbuffer, $gfilesize;
close GRAPHFILE;
The size of the file ($gfilesize) matches the size of the scalar
($gbuffer). This is good.
Then I proceed to paw through the buffer. The 1st 8 bytes of the file is
a signature, which I read and deal with. Then, the file is a series of
chunks where the 1st 4 bytes is a 32 bit number representing the size of
the chunk, and the 2nd 4 bytes is an ASCII "chunk name", such as "IHDR".
So, after the signature, the next 8 bytes look like this:
00 00 00 0d 49 48 44 52 . . . . I H D R
I am trying to decode this with the following:
$bufptr = 8;
($chunksize, $chunkname) = unpack "L a4", substr($gbuffer, $bufptr,
8);
Actually, I've tried every permutation of "unpack" template that I can
think of.
The problem is that the 2nd scalar ($chunkname) comes out fine as
"IHDR", but the first scalar comes out as "218103808" which is wrong as
you can see above, it should be "13".
I thought I was starting to understand unpack, but what am I doing
wrong??
Barry Brevik
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs