Mit folgenden Code wird wie erwartet eine BMP-Date erstellt, welche 2x2 Pixel hat. Was mir ein Rätsel ist, ist biSize, welches ich ausgeklammert habe.
Gemäss Doku https://de.wikipedia.org/wiki/Windows_Bitmap & https://msdn.microsoft.com/de-de/library/dd183376(en-us,VS.85).aspx dürfte dieser '0' sein. Aber wen dieser '0' ist, kann die kommt bei xViewer ein Header-Fehler. Auc kommt dieser Fehler, wen ich dies Datengrösse angeben.
Nur bei '40 ' geht es. Auf den Wert '40' bin ich gekommen, weil ich eine bestehende BMP angeguckt habe.
Wieso ?
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
dk: TDateiKopf;
ib: TInfoBlock;
fs: TFileStream;
const
Textur32: packed array[0..1, 0..1, 0..3] of byte = ((($FF, $00, $00, $FF), ($00, $FF, $00, $FF)), (($00, $00, $FF, $FF), ($FF, $00, $00, $FF)));
begin
with dk do begin
bfType := byte('B') + byte('M') shl 8;
bfSize := SizeOf(TDateiKopf) + SizeOf(TInfoBlock) + SizeOf(Textur32);
bfReserved := 0;
bfOffBits := 54;
end;
with ib do begin
biSize := 40;
biWidth := 2;
biHeight := 2;
biPlanes := 1;
biBitCount := 32;
biCompression := 0;
biSize := 40;
// biSize := 0;
// biSize := SizeOf(Textur32);
biXPelsPerMeter := 0;
biYPelsPerMeter := 0;
biClrUsed := 0;
biClrImportant := 0;
end;
fs := TFileStream.Create('test.bmp', fmCreate);
fs.Write(dk, SizeOf(dk));
fs.Write(ib, SizeOf(ib));
fs.Write(Textur32, SizeOf(Textur32));
fs.Free;
end; \0