Created
July 23, 2013 15:18
-
-
Save kswlee/6063204 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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