本文介绍了你如何提取从TGraphicField位图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要疯了。

下面是我在做什么。


  1. 放入一个TClientDataSet,一个的TImage,并在窗体上一个TButton。

  2. 将Clientdataset1.Filename到biolife.xml

  3. 按钮双击并添加下列code:

     程序TForm31.Button1Click(发件人:TObject的);
    VAR
      BF:TBlobField;
      BS:TStream;
      BM:TBitmap;
    开始
      ClientDataset1.Open;
      ClientDataset1.First;
      BF:= ClientDataSet1.FieldByName('平面')作为TBlobField;
      BS:= ClientDataSet1.CreateBlobStream(BF,bmRead);
      BS.Position:= 0;
      BM:= TBitmap.Create;
      尝试
        BM.LoadFromStream(BS);
      最后
        BM.Free;
      结束;
    结束;


运行它。当我这样做,我得到位图图像无效。

咦?该数据一直是位年 - ?什么是错


解决方案

"BLOB header" is misleading there, it appears to be a remnant of Paradox storage format for graphic memos.

(* from DB *)

{ Paradox graphic BLOB header }
type
  TGraphicHeader = record
    Count: Word;                { Fixed at 1 }
    HType: Word;                { Fixed at $0100 }
    Size: Longint;              { Size not including header }
  end;


procedure TForm1.FormClick(Sender: TObject);
const
  HeaderSize = SizeOf(TGraphicHeader);
var
  Field: TGraphicField;
  Stream: TClientBlobStream;
begin
  Field := ClientDataSet1.FieldByName('Graphic') as TGraphicField;
  Stream := ClientDataSet1.CreateBlobStream(Field, bmRead) as TClientBlobStream;
  Stream.SaveToFile('dump.bin');            // examine BLOB and see extra bytes preceding BITMAPFILEHEADER
  Assert(Stream.Position = 0);
  Stream.Seek(+HeaderSize, soFromCurrent);  // discard header, it does not contain anything of use anyways
  Image1.Picture.Bitmap.LoadFromStream(Stream);

  ClientDataSet1.Next;
end;

这篇关于你如何提取从TGraphicField位图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 21:30