I am creating simple BMP image with Java. Unfortunately I do not know how to store width and height size information into the DIB header, when the size of width or height exceeds 255 value in decimals (FF value in hex). To create small size image (255x255), I just enter
for width: FF 00 00 00,
for height: FF 00 00 00.
Maximum value that I can enter in one place is FF in hex (255 in decimals). How can I enter values larger than 255 (FF in hex) into these four places 00 00 00 00, in order to create any large size images, such as 513x513 pixels? Somehow I have to use other zeros, but I could not find any decent explanation anywhere. How should I implement this principle in Java code? I would be very grateful for any help.
This is part of my Java code that is used to enter size values to DIB header to create images not larger than 255x255.
writer = new FileOutputStream(new File(onName));
// width
writer.write(255);
writer.write(0);
writer.write(0);
writer.write(0);
// height
writer.write(255);
writer.write(0);
writer.write(0);
writer.write(0);
This is my full Java code:
package fractalTerrain.midpointDisplacement;
import java.io.*;
import java.util.Random;
// User: Fataho
// Date: 2015-01-10
public class MonochromeMidpointDisplacement {
private static final String onName = "src\\fractalTerrain\\midpointDisplacement\\test2.bmp";
private Random random = new Random();
private static final int H_GRID = 256;
private static final int V_GRID = 256;
public static void main(String[] args) {
MonochromeMidpointDisplacement midpointDisplacement = new MonochromeMidpointDisplacement();
midpointDisplacement.go();
}
private void go(){
// fillMap(map, min, max);
printMap();
}
public void printMap(){
// 3.0 output to file
// 3.1 Begin the file
// 3.1.1 open output file
FileOutputStream writer = null;
try {
writer = new FileOutputStream(new File(onName));
// 3.1.2 copy the header
// 3.1.2.1 magic number
writer.write(66);
writer.write(77);
// 3.1.2.2 file size/unused space
for (int i = 0; i < 8; i++){
writer.write(0);
}
// 3.1.2.3 data offset
writer.write(54);
// 3.1.2.4 unused space
for (int i = 0; i < 3; i++){
writer.write(0);
}
// 3.1.2.5 header size
writer.write(40);
// 3.1.2.6 unused space
for (int i = 0; i < 3; i++){
writer.write(0);
}
// 3.1.2.7 file width (trickier)
writer.write(255);
writer.write(0);
writer.write(0);
writer.write(0);
// 3.1.2.8 file height (trickier)
writer.write(255);
writer.write(0);
writer.write(0);
writer.write(0);
// 3.1.2.9 color planes
writer.write(1);
writer.write(0);
// 3.1.2.10 bit depth
writer.write(24);
// 3.1.2.11 the rest
for (int i = 0; i < 25; i++){
writer.write(0);
}
for(int g = 0; g < ((V_GRID) * (H_GRID )); g++){
writer.write(255);
writer.write(0);
writer.write(0);
}
for (int k = 0; k < (H_GRID % 4); k++){
writer.write(0);
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}