gpt4 book ai didi

delphi - Delphi没有正确编写我的文件头

转载 作者:行者123 更新时间:2023-12-03 18:56:24 31 4
gpt4 key购买 nike

我以为我不用保存带有8位BMP的TImage,而是保存自己的位图-我之前用Delphi做过几次。但是由于某种原因,我无法弄清楚,文件的前两个字节总是写为四个字节!
我的标题记录是

type
BitmapH = Record
head : WORD;
filesize : DWORD;
reserved : DWORD;
bmpoffset : DWORD;
bmpheadersize : DWORD;
width : DWORD;
height : DWORD;
planes : WORD;
bpp : word;
comp : longint;
bmdatasize : longint;
hres : longint;
vres : longint;
numofcolors : longint;
importantcolors : longint;
palette : array[0..1023] of byte;
end;


我什至尝试将其更改为2字节数组仍然没有用。即使更改为head:byte;它仍然会写1个字节,然后将垃圾推到下一个3个。我肯定缺少简单的东西!

这是我写文件头的方式-

var BM : file of BitmapH;
var BMD : file of byte;
var header : BitmapH;
var i : integer;
var test : byte;
begin

AssignFile(BM, 'd:\test.bmp');
Rewrite(BM);

header.head := 19778;
// header.head[1] := 'M';
header.filesize := 2102;
header.reserved := 0;
header.bmpoffset := 1080;
header.bmpheadersize := 40;
header.width := 32;
header.height := 32;
header.planes := 1;
header.bpp := 8;
header.comp := 0;
header.bmdatasize := 1024;
header.hres := 100;
header.vres := 100;
header.numofcolors := 0;
header.importantcolors := 0;

for i := 0 to 255 do
begin
header.palette[i*4] := getBvalue(palette[i]);
header.palette[(i*4) + 1] := getBvalue(palette[i]);
header.palette[(i*4) + 2] := getBvalue(palette[i]);
header.palette[(i*4) + 3] := 0;
end;

Write(BM, header);


抱歉,这只是测试:)

任何帮助表示赞赏!

PS-不使用TImage进行保存的原因是因为我正在即时更改调色板,这似乎很麻烦通过TImage进行编辑。

最佳答案

使用packed record避免默认的内存对齐。

关于delphi - Delphi没有正确编写我的文件头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044396/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com