我疯了.
这就是我在做什么
在表单上删除TClientDataset,TImage和TButton.
将Clientdataset1.Filename设置为biolife.xml
双击按钮并添加以下代码:
procedure TForm31.Button1Click(Sender: TObject); var BF: TBlobField; BS: TStream; BM: TBitmap; begin ClientDataset1.Open; ClientDataset1.First; BF := ClientDataSet1.FieldByName('Graphic') as TBlobField; BS := ClientDataSet1.CreateBlobStream(BF, bmRead); BS.Position := 0; BM := TBitmap.Create; try BM.LoadFromStream(BS); finally BM.Free; end; end;
运行.当我这样做时,我得到"位图图像无效".
咦?这些数据多年来一直是位图 - 出了什么问题?
如果您将TGraphicField
文件保存(使用它的SaveToFile
方法)并使用十六进制查看器查看该文件,它确实是一个位图.问题是在开头有一个描述文件类型的blob头.这在文档中有点含糊地提到.我还在文档中的TBlobField.GraphicHeader
属性描述中找到了对它的引用.
如果设置Stream.Position
为8而不是0,则它会正确读入a TBitmap
.
BS.Position := 8; BM.LoadFromStream(BS);