Re: Getting header info of a BMP file
Good news, I managed to get the next part to half work but I don't
think I'm getting the right bytes in for my colours.
// The "CSE390Lab3McClafferty" class.
import java.io.*;
import java.lang.*;
import java.text.*;
public class CSE390Lab3McClafferty
{
public static void main (String[] args)
{
CSE390Lab3BMPMcClafferty pic = new CSE390Lab3BMPMcClafferty
();
int nNumColors = 0;
int count = 0;
int indexer=0;
try
{
File bmp = new File ("pic1.bmp");
FileInputStream bitStream = new FileInputStream (bmp);
bitStream.skip (2);
pic.bfSize = bitStream.read () + bitStream.read () * 256 +
bitStream.read () * 65536 + bitStream.read () * 16777216;
bitStream.skip (12);
pic.biWidth = bitStream.read () + bitStream.read () * 256
+ bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biHeight = bitStream.read () + bitStream.read () * 256
+ bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biPlanes = bitStream.read () + bitStream.read () *
256;
pic.biBitCount = bitStream.read () + bitStream.read () *
256;
pic.biCompression = bitStream.read () + bitStream.read ()
* 256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biSizeImage = bitStream.read () + bitStream.read () *
256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biXPelsPerMeter = bitStream.read () + bitStream.read
() * 256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biYPelsPerMeter = bitStream.read () + bitStream.read
() * 256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
pic.biClrUsed = bitStream.read () + bitStream.read () *
256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
nNumColors = pic.biClrUsed;
pic.biClrImportant = bitStream.read () + bitStream.read ()
* 256 + bitStream.read () * 65536 + bitStream.read () * 16777216;
byte[] byBuf = new byte [4];
int i = bitStream.read (byBuf);
System.out.println (i);
NumberFormat formatter = new DecimalFormat ("000");
String index=formatter.format (indexer);
System.out.print(index + " ");
while ((i = bitStream.read (byBuf)) != -1)
{
if (i != 4)
throw new IOException ("Unexpected end of binary
data! bitmap is corrupted");
int iRed = byBuf [0];
int iGreen = byBuf [1];
int iBlue = byBuf [2];
int iUnused = byBuf [3];
String dRed = formatter.format (iRed);
String dGreen = formatter.format (iGreen);
String dBlue = formatter.format (iBlue);
String dUnused = formatter.format (iUnused);
String oDisplay = dRed + "." + dGreen + "." + dBlue +
"." + dUnused + " ";
count++;
if (count == 5)
{
System.out.println ("\n");
count =0;
indexer++;
index=formatter.format (indexer);
System.out.print (index + " ");
}
System.out.print (oDisplay);
}
pic.displayFileHeader ();
pic.displayInfoHeader ();
pic.displayColourTable ();
}
catch (Exception e)
{
System.out.println ("Exception Thrown: " + e);
}
} // main method
// build an int from a byte array - convert little to big endian
// set high order bytes to 0xfff
} // CSE390Lab3McClafferty class
Any ideas?