Javaで簡単なBMP画像を作成しています。残念ながら、幅または高さのサイズが 10 進数で 255 値 (16 進数で FF 値) を超える場合、幅と高さのサイズ情報を DIB ヘッダーに格納する方法がわかりません。小さなサイズの画像(255x255)を作成するには、入力するだけです
幅: FF 00 00 00、
高さ: FF 00 00 00 .
1 か所に入力できる最大値は、16 進数で FF (10 進数で 255) です。513x513 ピクセルなどの大きなサイズの画像を作成するために、これら 4 つの場所00 00 00 00に 255 (16 進数で FF) より大きい値を入力するにはどうすればよいですか? どういうわけか、他のゼロを使用する必要がありますが、適切な説明はどこにも見つかりませんでした。Java コードでこの原則をどのように実装すればよいですか? どんな助けにもとても感謝しています。
これは、DIB ヘッダーにサイズ値を入力して 255x255 以下の画像を作成するために使用する Java コードの一部です。
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);
これは私の完全なJavaコードです:
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();
}
}
}