Skip to content

Instantly share code, notes, and snippets.

@kswlee
Created July 23, 2013 15:18
Show Gist options
  • Save kswlee/6063204 to your computer and use it in GitHub Desktop.
Save kswlee/6063204 to your computer and use it in GitHub Desktop.
/*
* BMP FileHeader
*/
private class FileHeader { // 14 bytes
public String signature;
public int fileSize;
public short reserved1;
public short reserved2;
public int fileOffsetToPixelArray;
public FileHeader(String signature,
int fileSize,
short reserved1,
short reserved2,
int fileOffset) {
this.signature = signature;
this.fileSize = fileSize;
this.reserved1 = reserved1;
this.reserved2 = reserved2;
this.fileOffsetToPixelArray = fileOffset;
}
public void write(DataOutputStreamLittleEndian dataOutputStream) throws IOException {
dataOutputStream.writeString(signature);
dataOutputStream.writeInt(fileSize);
dataOutputStream.writeShort(reserved1);
dataOutputStream.writeShort(reserved2);
dataOutputStream.writeInt(fileOffsetToPixelArray);
}
}
/*
* BMP DIBHeader
*/
public static abstract class DIBHeader {
public String name;
public int sizeInBytes;
public DIBHeader(String name, int sizeInBytes) {
this.name = name;
this.sizeInBytes = sizeInBytes;
}
public abstract void writeToStream(DataOutputStreamLittleEndian reader);
}
public static class DIBHeaderBitmapInfo extends DIBHeader
{
public int[] imageSizeInBytesXY;
public short planes;
public short bitsPerPixel;
public int compression;
public int imageSizeInBytes;
public int[] pixelsPerMeterXY;
public int numberOfColorsInPalette;
public int numberOfColorsUsed;
public int[] imageSizeInPixelsXY;
public DIBHeaderBitmapInfo() {
super("BitmapInfo", DIB_HEADER_SIZE);
}
public DIBHeaderBitmapInfo (
int sizeInBytes,
int[] imageSizeInPixelsXY,
short planes,
short bitsPerPixel,
int compression,
int imageSizeInBytes,
int[] pixelsPerMeterXY,
int numberOfColorsInPalette,
int numberOfColorsUsed) {
this();
this.sizeInBytes = sizeInBytes;
this.imageSizeInPixelsXY = imageSizeInPixelsXY;
this.planes = planes;
this.bitsPerPixel = bitsPerPixel;
this.compression = compression;
this.imageSizeInBytes = imageSizeInBytes;
this.pixelsPerMeterXY = pixelsPerMeterXY;
this.numberOfColorsInPalette = numberOfColorsInPalette;
this.numberOfColorsUsed = numberOfColorsUsed;
if (this.imageSizeInBytes == 0) {
this.imageSizeInBytes =
this.imageSizeInBytesXY[0]
* this.imageSizeInBytesXY[1]
* this.bitsPerPixel
/ 8;
}
}
public void writeToStream(DataOutputStreamLittleEndian writer) {
try {
writer.writeInt(this.sizeInBytes);
writer.writeInt(this.imageSizeInPixelsXY[0]);
writer.writeInt(this.imageSizeInPixelsXY[1]);
writer.writeShort(this.planes);
writer.writeShort(this.bitsPerPixel);
writer.writeInt(this.compression);
writer.writeInt(this.imageSizeInBytes);
writer.writeInt(this.pixelsPerMeterXY[0]);
writer.writeInt(this.pixelsPerMeterXY[1]);
writer.writeInt(numberOfColorsInPalette);
writer.writeInt(numberOfColorsUsed);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment