
delphi 一个保存*.BMP代码问题
请帮忙看看代码那里错误了varStream:TFileStream;Header:TBitmapFileHeader;BmpInfo:PBitMapInfo;Header...
请 帮忙看看 代码那里错误了
var
Stream: TFileStream;
Header: TBitmapFileHeader;
BmpInfo : PBitMapInfo;
HeaderSize, fh: Integer;
Width, Height : longint;
i, j, idx : integer;
pc : PTCellData;
pt : PTTileData;
TempImage : TAns2Image;
MapBlockData : TMapBlockData;
begin
Timer1.Enabled := FALSE;
SaveDialog1.FileName := '*.bmp';
if SaveDialog1.Execute then begin
Width :=MAXMAPLENGTH * 32;
Height:=MAXMAPLENGTH * 12;
HeaderSize := SizeOf(TBitmapInfo);
BmpInfo := AllocMem(HeaderSize);
with BmpInfo^.bmiHeader do
begin
biSize := SizeOf(TBitmapInfoHeader);
biWidth := Width;
biHeight := -Height;
biPlanes := 1;
biBitCount := 16; //always convert to 8 bit image
biCompression := BI_RGB;
biClrUsed := 0;
biClrImportant := 0;
end;
{
if BmpInfo^.bmiHeader.biHeight < 0 then begin
FlipBits(PByte(mapbuffer), Width*2, Height);
BmpInfo^.bmiHeader.biHeight := -BmpInfo^.bmiHeader.biHeight;
end;
}
FillChar (Header, sizeof(TBitmapFileHeader), 0);
with Header do begin
bfType := $4D42;
bfSize := 1078+Width*Height*2-1024;
bfOffBits := 1078-1024;
end;
// fh := FileCreate(FileName);
// FileClose(fh);
//Initialise and open file
Stream := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmOpenWrite);
//Read file Header
Stream.WriteBuffer(Header, SizeOf(Header));
//Read bitmap info header and validate
Stream.WriteBuffer(BmpInfo^, SizeOf(TBitmapInfoHeader));
idx := 0;
for j := 0 to MAXMAPLENGTH -1 do begin
for i := 0 to MAXMAPLENGTH -1 do begin
pt := TileDataList.Items[3];
TempImage := TAns2Image.Create ( 32, 12, 0,0);
TempImage := TileDataList.GetTileImage (SelectedTile, i+j*pt^.nWCell);
Stream.WriteBuffer(TempImage.Bits , sizeof (TempImage.Bits));
TempImage.Free;
idx := idx + 1;
end;
end;
{
for j := 0 to MAXMAPLENGTH -1 do begin
for i := 0 to MAXMAPLENGTH -1 do begin
Stream.WriteBuffer(, LongInt(Width*Height -1));
end;
end;
}
Stream.Free;
FreeMem ( BmpInfo);
end;
Timer1.Enabled := TRUE;
end; 展开
var
Stream: TFileStream;
Header: TBitmapFileHeader;
BmpInfo : PBitMapInfo;
HeaderSize, fh: Integer;
Width, Height : longint;
i, j, idx : integer;
pc : PTCellData;
pt : PTTileData;
TempImage : TAns2Image;
MapBlockData : TMapBlockData;
begin
Timer1.Enabled := FALSE;
SaveDialog1.FileName := '*.bmp';
if SaveDialog1.Execute then begin
Width :=MAXMAPLENGTH * 32;
Height:=MAXMAPLENGTH * 12;
HeaderSize := SizeOf(TBitmapInfo);
BmpInfo := AllocMem(HeaderSize);
with BmpInfo^.bmiHeader do
begin
biSize := SizeOf(TBitmapInfoHeader);
biWidth := Width;
biHeight := -Height;
biPlanes := 1;
biBitCount := 16; //always convert to 8 bit image
biCompression := BI_RGB;
biClrUsed := 0;
biClrImportant := 0;
end;
{
if BmpInfo^.bmiHeader.biHeight < 0 then begin
FlipBits(PByte(mapbuffer), Width*2, Height);
BmpInfo^.bmiHeader.biHeight := -BmpInfo^.bmiHeader.biHeight;
end;
}
FillChar (Header, sizeof(TBitmapFileHeader), 0);
with Header do begin
bfType := $4D42;
bfSize := 1078+Width*Height*2-1024;
bfOffBits := 1078-1024;
end;
// fh := FileCreate(FileName);
// FileClose(fh);
//Initialise and open file
Stream := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmOpenWrite);
//Read file Header
Stream.WriteBuffer(Header, SizeOf(Header));
//Read bitmap info header and validate
Stream.WriteBuffer(BmpInfo^, SizeOf(TBitmapInfoHeader));
idx := 0;
for j := 0 to MAXMAPLENGTH -1 do begin
for i := 0 to MAXMAPLENGTH -1 do begin
pt := TileDataList.Items[3];
TempImage := TAns2Image.Create ( 32, 12, 0,0);
TempImage := TileDataList.GetTileImage (SelectedTile, i+j*pt^.nWCell);
Stream.WriteBuffer(TempImage.Bits , sizeof (TempImage.Bits));
TempImage.Free;
idx := idx + 1;
end;
end;
{
for j := 0 to MAXMAPLENGTH -1 do begin
for i := 0 to MAXMAPLENGTH -1 do begin
Stream.WriteBuffer(, LongInt(Width*Height -1));
end;
end;
}
Stream.Free;
FreeMem ( BmpInfo);
end;
Timer1.Enabled := TRUE;
end; 展开
展开全部
你的这个
Stream.WriteBuffer(, LongInt(Width*Height -1)); 为什麼只有一个参数呢?
Stream.WriteBuffer(, LongInt(Width*Height -1)); 为什麼只有一个参数呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询