计算机二级DELPHI辅导:TMemoryStream的操作
来源:优易学  2011-6-7 12:55:57   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 ---- 事件代码编写如下:
  ---- 1. btnRead的Click事件,这里演示了TFileStream的用法。
  var
  MS: TFileStream;
  begin
  if OpenDialog1.Execute then
  begin
  MS:=TFileStream.Create
  (OpenDialog1.FileName, fmOpenRead);
  Image1.Picture.Bitmap.LoadFromStream(MS);
  MS.Free;
  end;
  end;
  ---- 2. btnInvert的Click事件,这里演示了TMemoryStream的用法。其中使用了Invert函数,这是一个简单的将图象反色的函数(仅对真彩图象有效),它返回一个指向处理过的图象数据块的指针。
  var
  M
  S: TMemoryStream;
  pImage: pointer;
  begin
  MS:=TMemoryStream.create;
  Image1.Picture.Bitmap.SaveToStream(MS);
  MS.Position:=0;
  pImage:=Invert(MS.Memory, MS.size);
  file://Memory属性是指向实际内存块的指针
  MS.Write(pImage^,MS.size);
  MS.Position:=0;
  file://上一行代码使指针移到了Stream末尾,所以要复位
  Image1.Picture.Bitmap.LoadFromStream(MS);
  FreeMem(pImage);
  MS.Free;
  end;
  Invert函数如下:
  function TForm1.Invert
  (pImage: pointer; size: Integer): pointer;
  var
  pData, pMem: PChar;
  i: Integer;
  begin
  pMem:=AllocMem(size);
  CopyMemory(pMem,pImage,size);
  pData:=pMem+54;
  for i:=0 to size-54-1 do
  begin
  pData^:=Char(not integer(pData^));
  pData:=pData+1;
  end;
  Result:=pMem;
  end;
  ---- 1. btnSave的Click事件,这里演示了TMemoryStream的另一种用法,将Stream中的数据写到数据库中去。
  var
  MS: TMemoryStream;
  begin
  MS:=TMemoryStream.create;
  Image1.Picture.Bitmap.SaveToStream(MS);
  MS.Position:=0;
  Table1.Append;
  file://在数据库中添加一条记录
  TBlobField(Table1.FieldbyName
  (\'image\')).LoadFromStream(MS);
  Table1.Post;
  file://将所作的更新写入数据库
  end;
  ---- 4. DBNavigator1的Click事件,这里演示了TBlobStream的用法,使用了和写入时不同的方法来读出数据库的图象数据。
  var
  MS: TStream;
  begin
  with Table1 do
  MS:=CreateBlobStream
  (FieldbyName(\'image\'),bmRead);
  Image1.Picture.Bitmap.
  LoadFromStream(MS);
  MS.Free;
  end;

上一页  [1] [2] [3] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训