• 二进制文件转成文本保存,并可以读回


    以 JPEG 图片为例,以下代码演示了如何将一个 JPEG 图片保存为纯文本形式,并将其以图片形式读回并显示。
    保存 TXT:

    function TForm1.JpegToText(AFileName:string; SaveFile: Boolean; TxtFileName: string): string;
    var
    FileStream        : TFileStream;
    StringStream      : TStringStream;
    FSize             : integer;
    FileData          : string;
    i                 : integer;
    DataStr           : string;
    begin
    try
        FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
        StringStream := TStringStream.Create(EmptyStr);
        FSize := FileStream.Size;
        StringStream.CopyFrom(FileStream, FSize);
        FileData := StringStream.DataString;
        DataStr := EmptyStr;
        for i := 1 to Length(FileData) do
        begin
          DataStr := DataStr + InttoHex(Ord(FileData[i]), 2);
        end;
        Result := DataStr;
        if SaveFile then
        begin
          with TStringList.Create do
          begin
            Text := DataStr;
            SaveToFile(TxtFileName);
            Free;
          end; 
        end; 
    finally
        freeandnil(FileStream);
        freeandnil(StringStream);
    end;
    end;

    从 TXT 读回 JPEG:

    function TForm1.TextToJpeg(AFileName: string; SaveFile: Boolean; JpegFileName: string): TJPEGImage;
    var
    buf               : array of Byte;
    DataLength        : Integer;
    i                 : Integer;
    DataStr           : string;
    ByteFile          : file of byte;
    jpg               : TJPEGImage;
    tmpFileName: string;
    begin
    with TStringList.Create do
    begin
        LoadFromFile(AFileName);
        DataStr := Text;
        Free;
    end;
    DataLength := Length(DataStr) div 2-1;
    SetLength(buf, DataLength);
    for i := 1 to DataLength do
    begin
        buf[i - 1] := StrToInt('$' + copy(DataStr, (i - 1) * 2 + 1, 2));
    end;
    tmpFileName := ExtractFilePath(ParamStr(0))+'tmp.jpg';
    AssignFile(ByteFile, tmpFileName);
    Rewrite(ByteFile);
    for i := 0 to DataLength - 1 do
    begin
        write(ByteFile, buf[i]);
    end;
    CloseFile(ByteFile);
    Result := TJPEGImage.Create;
    Result.LoadFromFile(tmpFileName);
    if SaveFile then
        Result.SaveToFile(JpegFileName);
    DeleteFile(tmpFileName);
    end;
  • 相关阅读:
    进度3
    进度2
    进度1
    库存物资管理系统
    课程管理系统
    文件与流作业
    bzoj4027: [HEOI2015]兔子与樱花
    bzoj2067: [Poi2004]SZN
    bzoj2071:[POI2004]山洞迷宫
    bzoj1063: [Noi2008]道路设计
  • 原文地址:https://www.cnblogs.com/railgunman/p/1889725.html
Copyright © 2020-2023  润新知