delphi 通过 TMemoryStream 把字符串附加到图片文件里并能读取出来  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 通过 TMemoryStream 把字符串附加到图片文件里并能读取出来


var

  s: string;

  bm: TBitmap;

  ms: TMemoryStream;

  len: Int64;

begin

  ms := TMemoryStream.Create;

  bm := TBitmap.Create;

  try

    bm.LoadFromFile('d:\d.bmp');

    //write string body size, body itself

    s := 'A nice picture';

    len := Length(s) * SizeOf(Char);

    ms.Write(len, SizeOf(len));

    ms.Write(PChar(s)^, len);


    //now picture

    bm.SaveToStream(ms);


    //change string and picture to be sure we load new ones

    bm.Canvas.FillRect(rect(0,0,100,100));

    s := '';


    //now restore and show

    ms.Position := 0;

    ms.Read(len, sizeof(len));

    SetLength(s, len div SizeOf(Char));

    ms.Read(PChar(s)^, len);

    Caption := s;

    bm.LoadFromStream(ms); //reads picture from current position

    Canvas.Draw(0, 0, bm);

  finally

    ms.Free;

    bm.Free;

  end;

从另一个流加载的 jpeg 示例:


var

  s: string;

  ms, jpstream: TMemoryStream;

  len: Int64;

  jp: TJpegImage;

begin

  ms := TMemoryStream.Create;

  jpstream := TMemoryStream.Create;

  jp := TJpegImage.Create;



  try

    //write string body size, body itself

    s := 'A nice picture';

    len := Length(s) * SizeOf(Char);

    ms.Write(len, SizeOf(len));

    ms.Write(PChar(s)^, len);


    jpstream.LoadFromFile('d:\d.jpg');

    jpstream.Position := 0;

    ms.CopyFrom(jpstream, jpstream.Size);



    //now restore ans show

    ms.Position := 0;

    ms.Read(len, sizeof(len));

    SetLength(s, len div SizeOf(Char));

    ms.Read(PChar(s)^, len);

    Caption := s;


    jp.LoadFromStream(ms);


    Canvas.Draw(0, 0, jp);

  finally

    ms.Free;

    jp.Free;

    jpstream.Free;

  end;



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.035994052886963 seconds