Delphi 如何保存/加载此数据

Delphi 如何保存/加载此数据,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个映射,它是一个带有属性的tgraphic控件 HexRow : Integer; HexColumns : integer; TempMap :TBitmap; 我想将所有这些数据保存到一个文件中。当我读取文件时,我可以得到所有这些数据。就像这样 Procedure Map.Load(name :String); begin Something.LoadfromFile(string); TempMap := Something.Bitmap; HexRow := Som

我有一个映射,它是一个带有属性的
tgraphic控件

HexRow : Integer;
HexColumns : integer;
TempMap :TBitmap;
我想将所有这些数据保存到一个文件中。当我读取文件时,我可以得到所有这些数据。就像这样

Procedure Map.Load(name :String);
begin
  Something.LoadfromFile(string);
  TempMap := Something.Bitmap;
  HexRow  := Something.hexRow;
  HexColumn := Something.HexColumn;
end;

但不知道什么是“某物”。保存时也一样,它应该保存所有这些属性。您需要编写写入和读取信息的方法。您可以使用二进制writer和reader对象来实现

procedure TMap.SaveToStream(Stream: TStream);
var
  Writer: TBinaryWriter;
begin
  Writer := TBinaryWriter.Create(Stream);
  try
    Writer.Write(HexRow);
    Writer.Write(HexColumn);
    Bitmap.SaveToStream(Stream);
  finally
    Writer.Free;
  end;
end;

procedure TMap.LoadFromStream(Stream: TStream);
var
  Reader: TBinaryReader;
begin
  Reader := TBinaryReader.Create(Stream);
  try
    HexRow := Reader.ReadInteger;
    HexColumn := Reader.ReadInteger;
    Bitmap.LoadFromStream(Stream);
  finally
    Reader.Free;
  end;
end;
或者,如果你想变得可爱,那么你可以先编写位图,然后在文件末尾填充额外的信息。我认为大多数位图读取代码只会忽略最后存储的额外数字。当然,这些值在使用除您自己的软件之外的任何软件的往返过程中都无法存活

要保存到文件并从中加载,请使用
TFileStream


当然,这样的文件格式并没有给您太多的空间来进行将来的增强和修改。我个人认为我倾向于使用PNG格式。这将为您提供压缩,我相信您可以添加自定义元数据。

您需要编写写入和读取信息的方法。您可以使用二进制writer和reader对象来实现

procedure TMap.SaveToStream(Stream: TStream);
var
  Writer: TBinaryWriter;
begin
  Writer := TBinaryWriter.Create(Stream);
  try
    Writer.Write(HexRow);
    Writer.Write(HexColumn);
    Bitmap.SaveToStream(Stream);
  finally
    Writer.Free;
  end;
end;

procedure TMap.LoadFromStream(Stream: TStream);
var
  Reader: TBinaryReader;
begin
  Reader := TBinaryReader.Create(Stream);
  try
    HexRow := Reader.ReadInteger;
    HexColumn := Reader.ReadInteger;
    Bitmap.LoadFromStream(Stream);
  finally
    Reader.Free;
  end;
end;
或者,如果你想变得可爱,那么你可以先编写位图,然后在文件末尾填充额外的信息。我认为大多数位图读取代码只会忽略最后存储的额外数字。当然,这些值在使用除您自己的软件之外的任何软件的往返过程中都无法存活

要保存到文件并从中加载,请使用
TFileStream


当然,这样的文件格式并没有给您太多的空间来进行将来的增强和修改。我个人认为我倾向于使用PNG格式。这将为您提供压缩,我相信您可以添加自定义元数据。

您需要编写写入和读取信息的方法。您可以使用二进制writer和reader对象来实现

procedure TMap.SaveToStream(Stream: TStream);
var
  Writer: TBinaryWriter;
begin
  Writer := TBinaryWriter.Create(Stream);
  try
    Writer.Write(HexRow);
    Writer.Write(HexColumn);
    Bitmap.SaveToStream(Stream);
  finally
    Writer.Free;
  end;
end;

procedure TMap.LoadFromStream(Stream: TStream);
var
  Reader: TBinaryReader;
begin
  Reader := TBinaryReader.Create(Stream);
  try
    HexRow := Reader.ReadInteger;
    HexColumn := Reader.ReadInteger;
    Bitmap.LoadFromStream(Stream);
  finally
    Reader.Free;
  end;
end;
或者,如果你想变得可爱,那么你可以先编写位图,然后在文件末尾填充额外的信息。我认为大多数位图读取代码只会忽略最后存储的额外数字。当然,这些值在使用除您自己的软件之外的任何软件的往返过程中都无法存活

要保存到文件并从中加载,请使用
TFileStream


当然,这样的文件格式并没有给您太多的空间来进行将来的增强和修改。我个人认为我倾向于使用PNG格式。这将为您提供压缩,我相信您可以添加自定义元数据。

您需要编写写入和读取信息的方法。您可以使用二进制writer和reader对象来实现

procedure TMap.SaveToStream(Stream: TStream);
var
  Writer: TBinaryWriter;
begin
  Writer := TBinaryWriter.Create(Stream);
  try
    Writer.Write(HexRow);
    Writer.Write(HexColumn);
    Bitmap.SaveToStream(Stream);
  finally
    Writer.Free;
  end;
end;

procedure TMap.LoadFromStream(Stream: TStream);
var
  Reader: TBinaryReader;
begin
  Reader := TBinaryReader.Create(Stream);
  try
    HexRow := Reader.ReadInteger;
    HexColumn := Reader.ReadInteger;
    Bitmap.LoadFromStream(Stream);
  finally
    Reader.Free;
  end;
end;
或者,如果你想变得可爱,那么你可以先编写位图,然后在文件末尾填充额外的信息。我认为大多数位图读取代码只会忽略最后存储的额外数字。当然,这些值在使用除您自己的软件之外的任何软件的往返过程中都无法存活

要保存到文件并从中加载,请使用
TFileStream



当然,这样的文件格式并没有给您太多的空间来进行将来的增强和修改。我个人认为我倾向于使用PNG格式。这会给你带来压缩,我相信你可以添加自定义元数据。

看看你知道的一些类的源代码,它们可以将数据加载/保存到文件中(f.I.
TStringList
)我知道位图可以,但你能将值保存到位图中吗..我猜有点像元数据?我知道现在有些图像存储了拍摄图像的位置,但不知道如何做到这一点,只需看一看,从我个人使用的数据库中学习。SQLite可能是一个不错的选择。您可以将这些元数据整齐地存储在记录字段中,并在blob流中创建一个图像。你甚至可以通过这些元数据来搜索图像(如果需要的话)。看看你知道的一些可以将数据加载/保存到文件中的类的源代码(f.i.
TStringList
)我知道位图可以,但你能将值保存到位图吗..我想有点像元数据?我知道现在有些图像存储了拍摄图像的位置,但不知道如何做到这一点,只需看一看,从我个人使用的数据库中学习。SQLite可能是一个不错的选择。您可以将这些元数据整齐地存储在记录字段中,并在blob流中创建一个图像。你甚至可以通过这些元数据来搜索图像(如果需要的话)。看看你知道的一些可以将数据加载/保存到文件中的类的源代码(f.i.
TStringList
)我知道位图可以,但你能将值保存到位图吗..我想有点像元数据?我知道现在有些图像存储了拍摄图像的位置,但不知道如何做到这一点,只需看一看,从我个人使用的数据库中学习。SQLite可能是一个不错的选择。您可以将这些元数据整齐地存储在记录字段中,并在blob流中创建一个图像。你甚至可以通过这些元数据来搜索图像(如果需要的话)。看看你知道的一些可以将数据加载/保存到文件中的类的源代码(f.i.
TStringList
)我知道位图可以,但你能将值保存到位图吗..我想有点像元数据?我知道现在有些图像存储了拍摄图像的位置,但不知道如何做到这一点,只需看一看,从我个人使用的数据库中学习。SQLite可能是一个不错的选择。您可以将这些元数据整齐地存储在记录字段中,并在blob流中创建一个图像。你甚至可以通过这些元数据来搜索图像(如果需要的话)。首先,对最后一个问题感到抱歉,我很累,也很困惑。。第二,从未使用过TStream,但我假设在那里的某个地方,我也必须告诉它在哪里进行流式处理,也就是“somelocation.dat”?是的。使用
TFileStream
获取文件。@GlenMorse的
TStrings.LoadFromFile
的源代码提供了一个完美的例子首先对最后一个问题表示抱歉,我很累,很困惑。。第二,从未使用过TS