关Ole中保存图片怎么打开的问题(100分)

  • 主题发起人 主题发起人 82625741
  • 开始时间 开始时间
8

82625741

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
请问怎样把OLE控件保存的BMP图片用画板打开,我用OLE编辑的图片保存到数据库后可以用OLE打开,可却无法用Image或DBImage打开,所以也无法打印,有什么方法可以将OLE加入的文件头去掉然后用Image打开!谢谢!
 
OLE保存时加了自己的包头,需要OLE调用解释。
你不如直接将图片按二进制文件方式保存到数据库中。
以后各个控件就可以正常调用了。
 
IMAGE.BITMAP.LOADFROMSTREAM
 
抄的!
——————————————————————————————
Access中前面74或78个字节,SQL server中前78个字节好像是一些链接信息,
可能是用于ole的,具体我不清楚,访问的方法是:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
tempstream:TmemoryStream;
tempbitmap: Tbitmap;
begin
try
tempstream:=TmemoryStream.Create;
TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(tempstream);
tempbitmap := Tbitmap.Create;
tempstream.Position := 78;
tempbitmap.LoadFromStream(tempstream);
DBImage1.Picture.Bitmap.Assign(tempbitmap);
finally
tempstream.Free;
tempbitmap.Free;
end;
end;
tempstream.Position := 78; //这里在SQL Server中没有问题,在Access中
//有些问题,有时候是74,有时候是78,要写一个函数来处理。
 
没错,你把信息读到流中,然后对比一下,去掉头文件不就是了吗
 
谢谢各位大侠回答
我试着比较过普通BMP文件和OLE保存的BMP文件,发现普通的文件是前面54个字节为文件头,保存了BMP文件的相关信息如:大小、长度、宽度、颜色等等开始两位以BM为标志!可OLE保存的文件头是前2712个字节,可我无法找到普通文件的文件头在OLE文件中保存在什么位置,因为文件中根本无BM标志,所以也无法读取相关的信息!请各位大侠帮忙分析一下,谢了!
 
我在保存图片时用:
TBlobField(FieldByName('ZLPIC')).LoadFromFile(OPD.FileName);
其中OPE为一个打开文件对话框。

在打开图片时用:
MS := CreateBlobStream(FieldbyName('ZLPIC'),bmRead);
Image2.Picture.LoadFromStream(MS);
MS.Free;
MS 为TStream的变量。
从来没有什么问题,显示、打印都没问题,也没管过什么文件头。
 
我用的是ACCESS数据库
 
呵呵,如果只是单纯的读入读出那当然没什么问题!主要是我还要编辑图片呀,我要在程序中控制编辑然后再保存到数据库存中!我采用OLE控件,可那东东在保存时加入了自己的文件头,我想用IMAGE显示的时候就没办法了,因为读入的不再是标准的BMP文件头了!所以我现在需要的是怎么将OLE的文件头还原成标准的文件头然后才能正常的打印显示呀!
 
多人接受答案了。
 
后退
顶部