在Delphi中,我想将一个jpg图像从数据库中取出并显示,在不想通过临时文件的方法,请高手指点。(注意条件: 1.JPG图像 2.不使用临时文件)
多谢!!!
多谢!!!
解决方案 »
- tdbadvgrid怎么样隐藏表对呀?
- access数据库查询的时间类型问题
- (300求助,急)如何动态创建TreeView与文件目前对接
- 为什么ExtractAssociatedIcon函数执行失败?
- 用流拷贝文件的默认拷贝单元是多少字节?
- 有工作的delphi程序员进来一下:???????在线等!!!!!!!!!
- 我的access数据库中有个ole字段,在quickreport中用TQRDBText显示其内容可以吗?用TQRDBRichText有些字符如φ会有问题
- 用TsimpleDataSet.active执行一个插入语句,抛出EDatabaseError,信息是InternalDataSet:Cursor not returned form query。但数据已经成
- 求救:怎么样用Delphi 实现Unsharp mask 锐化效果。
- 如何在LISTBOX中插入80000条以上的ITEM?用ITEMS->LOADFROMFIELD()方法如何实现?
- 升星啦,高兴中...
- 有什么方法可将 jpg图像从数据库中提取并显示,而不使用临时文件
《表》数据库与图片(文件)的关系如何处理?
http://access911.net/index.asp?u1=a&u2=71FAB51E16DC
tmpPicStream: TAdoBlobStream;
MS: TMemoryStream;
Pic : TJpegImage;
----------------------------------------------------------------------
tmpPicStream:= TAdoBlobStream.Create(TBlobField(ADOQuery1.FieldByName('Pic')),bmRead);
try
tmpPicStream.Position := 0;
tmpPicStream.SaveToStream(MS);
MS.Position := 0;
Pic := TJpegImage.Create; //只能针对特定类型的图像进行显示, 比如JPG BMP等,而无法支持其他格式的图片
Pic.LoadFromStream(MS);
Image1.Picture.Graphic := Pic;
finally
tmpPicStream.Free;
end;
我想知道另外一种情况:各种多媒体资料(各类图片,影音资料)以二进制保存在数据库中,怎么样用Ole对象显示而不使用临时文件?
我直接用Ole对象LoadFromStream总是出错,后来只好使用先把Stream SaveToFile,然后Ole CreateObjectFromFile 来解决了.
type
TFileFormat = record
GraphicClass: TGraphicClass;
Extension: string;
end;
const
SupportFmt: array[0..5] of TFileFormat = (
(GraphicClass: TBitMap; Extension: 'BMP'),
(GraphicClass: TJPEGImage; Extension: 'JPG'),
(GraphicClass: TJPEGImage; Extension: 'JPEG'),
(GraphicClass: TIcon; Extension: 'ICO'),
(GraphicClass: TMetaFile; Extension: 'WMF'),
(GraphicClass: TMetaFile; Extension: 'EMF')
);
var
I: Integer;
GC: TGraphicClass;begin
Result := nil;
GC := nil;
Ext := AnsiUpperCase(Ext);
for I := 0 to High(SupportFmt) do
with SupportFmt[I] do
if Extension = Ext then begin
GC := GraphicClass;
Break;
end;
if GC = nil then Exit; Result := GC.Create;
try
SM.Position := 0; // *** 错误在此,原来没加这句,犯了一个低级错误
Result.LoadFromStream(SM);
except
Result.Free;
raise;
end;
end;procedure TfrmDesign.FormCreate(Sender: TObject);
var
SM: TMemoryStream;
Ext: string; // 扩展名
begin
Ext := tab.FieldByName('Ext').AsString;
SM := TMemoryStream.Create;
TBlobField(tab.FieldByName('Img')).SaveToStream(SM);
img.Picture.Graphic := LoadGraphicFromStream(SM, Ext);
SM.Free;
end;