使用Delphi如何存储图像格式为*.GIF或*JPG的图像文件到SQL Server数据库中?(100分)

  • 主题发起人 主题发起人 KaiLong
  • 开始时间 开始时间
K

KaiLong

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL Server 7.0支持很多种图像格式,使用LoadFromFile方法
只能存储*.BMP格式的图像,*.GIF或*.JPG文件怎么存储?
 
使用SaveToStream存储成流形式就可以啦。
 
用TFILESTEAM打开,
用用LOADFROMSTREAM保存
 
能否具体一点,我已经知道图像的文件名!
多谢!
 
我写了一个TDBJPGImage控件,可作参考。若要完整程序可EMail我。
部分源代码如下:

TDbJPEGImage = class(TImage)
......
end;

procedure TDbJPEGImage.DoDataChange(Sender: TObject);
var Fld: TBlobField;
Strm: TMemoryStream;
Jpeg: TJPEGImage;
begin
if not (FDataLink.Field is TBlobField) then
Exit;
Fld := FDataLink.Field as TBlobField;
if Fld.IsNull then
begin
Picture := nil;
Exit;
end;

Strm := TMemoryStream.Create();
Jpeg := TJPEGImage.Create();
try
Fld.SaveToStream(Strm);
Strm.Position := 0;
Jpeg.LoadFromStream(Strm);
Picture.Assign(Jpeg);
finally
Strm.Free();
Jpeg.Free();
end;
end;

procedure TDbJPEGImage.ApplyToDataSet;
var Fld: TBlobField;
Strm: TMemoryStream;
Jpeg: TJPEGImage;
begin
if not Assigned(FDataLink.DataSet) then
Exit;
if not FDataLink.DataSet.Active then
Exit;
if not (FDataLink.Field is TBlobField) then
Exit;
Fld := FDataLink.Field as TBlobField;

Strm := TMemoryStream.Create();
Jpeg := TJPEGImage.Create();
try
FDataLink.DataSet.Edit();
if (Picture = nil) or
(Picture.Graphic = nil) then
begin
Fld.Clear();
end
else
begin
Jpeg.Assign(Picture.Graphic);
Jpeg.SaveToStream(Strm);
Strm.Position := 0;
Fld.LoadFromStream(Strm);
end;
finally
Strm.Free();
Jpeg.Free();
end;
end;

 
*.GIF的我不知道,不过*.JPG的可以偷个懒:)——先用一个TImage读入内存,
再用TJpegImage配合TBlobStream写入数据库。

具体点,在uses里加上jpeg, DBTables,然后:var JImg: TJpegImage; SImg: TBlobStream;
Table1.Edit;
SImg := TBlobStream.Create(TBlobStream(Table1.Fields[0]), bmWrite);
JImg := TJpegImage.Create;
JImg.Assign(Image1.Picture);
JImg.SaveToStream(SImg);
试试行不行!
 
》》使用LoadFromFile方法只能存储*.BMP格式的图像,*.GIF或*.JPG文件怎么存储

我认为保存不会只有哪种可以保存哪种不能保存。*.gif *.jpg应该也是能保存的。
只是 TDBImage 只能显示 bmp 的,gif和jpg则不能显示,用什么方法保存的gif和jpg
都不能在目前版本的 TDBImage 显示

 
JPEG的很好办,用一个stringstream 把jpeg文件load,然后再赋值
如:
tempStream:=TStringStream.Create('');
tempstream.loadfromfile(jpegfilename);
tempstream.position:=0;
parambyname('p_pht').asblob := tempstream.datastring;//为query里的param
tempstream.free;

gif 的只有找控件了
 
要找什么控件啊..用TBlobStream好了..代码类似
什么文件都可以导到数据库里
不要老是想着用TDbImage..呵呵~

 
大家还没说*.gif怎样做,我也想知道!
 
yisp的办法是终极解决办法,虽然需要手工写一些代码,但可以对付一切的图像格式,
只要你知道如何把它转换成 bmp就行
 
多人接受答案了。
 
如何在FORM上画出一条随时间变化的正玄曲线
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部