在DELPHI中怎以實現不同格式圖片在數據庫中的存取(給我寫出來100分)(100分)

  • 主题发起人 主题发起人 wangbarry
  • 开始时间 开始时间
W

wangbarry

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
小弟我碰到一個急用不能解決的問題,望能有大虾帮我能解決:萬分感激不尽!!
在DELPHI中怎以實現不同格形式圖片在數據庫中的存取,請能給我一個實例程序;謝謝!






 
add a field called imageType,

var

MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
Query1Images.SaveToStream(MS);
case imagetype of
......
finally
MS.Free;
end;

end;
 
大虾,謝謝幫忙;我試了還是不行啊,可否寫一個詳細的給我?
不好意思,我是菜鸟!我想要寫一個完整一點的給我,要求是可以讀圖片可以保存我所讀的這一
圖片;
不好意思,我就只100分了,不然我會加多分的,SORRY!希望能幫忙.
 
怎麼沒有哪位大虾來幫我呢
 
可以寫給我嗎?我真的好急著要這個,
我笨,還是想不明白;為了保住我的飯碗,出來了,我全僅100分給你!謝謝!
 
用BLOB型字段来存图像,用一其它字段来存图像类型,
用TMEMORYSTREAM来读出图像。
根据类型来调入Image控件就行了。
当然中间要用TBITMAP……等类来转接一下。
例如:bbb是一个BLOB型字段,aaa是类别字段。
var
ms : TMemorystream;
tjpg : TJPEGimage;
begin
ms := TMemorystream.create;
bbb.savetostream(ms);
case aaa of
0 : image1.Picture.Bitmap.loadfromstream(ms);
1 :
begin
tjpg := TJPEGIMAGE.Create;
tjpg.loadfromstream(ms);
image1.picture.assign(tjpg);
tjpg.free;
end;
end;
ms.free;
end;

 
上面是读图像
存图像反过来就行了
TJPG.savetostream(ms);
bbb.loadfromstream(ms);
 
我的問題是從一個庫里面的表里怎麼樣要存
一個圖片文件進去,再可以從這個庫里面把這個文件讀出來;
如讀:
TGraphicField(DataSource1.DataSet.FieldByName(ImgFld)).LoadFromFile(sFilename );
存又怎樣呢?可以幫我寫一個完整可以嗎,為這個問題想了老几天了!
 
我要的是要存到SQL庫里表里的一個字段里去,再從這個庫表字段里能讀出顯示出來;
可以麼?
 
我的办法是将Graphic的类名放在流的前面,代码如下
procedure SavePictureToBlobField(G: TGraphic; F: TBlobFiled);
var
CName: ShortString;
S: TBlobStream;
begin
if G = nil then Exit;
S := TBlobStream.Create(F, bmWrite);
try
CName := G.ClassName,
S.Write(CName, Length(CName) + 1);
G.SaveToStream(S);
finally
S.Free;
end;
end;
procedure ReadPictureFromBlobField(G: TGraphic; F: TBlobFiled);
var
CName: ShortString;
S: TBlobStream;
begin
if G = nil then Exit;
S := TBlobStream.Create(F, bmRead);
try
S.Read(CName[0], 1);
S.Read(CName[1], Integer(CName[0]));
if SameText(CName, 'TBitmap') then
G := TBitmap.Create
else if SameText(CName, 'TJPEGImage) then
G := TJPEGImage.Create
else if ... //其他的格式
else begin
raise Exception.Create('无效的图片格式!');
end;
G.LoadFromStream(S);
finally
S.Free;
end;
end;
 
我碰到同样的问题,不过我是在数据库里存放图片路径,尚不知用什么语句来读取路径来显示图片
image1.picture.loadfromfile('路径');这样好象不行。
 
留个email,发个例子给你
 
JPEG和BMP同时存入,两种不同的方法,文件流和内存流

procedure TForm1.Button1Click(Sender: TObject);
var
fs:TFileStream;
MS: TMemoryStream;
Bmp:TBitmap;
MYJpeg:TJPEGImage;
begin
if OpenPictureDialog1.Execute then
begin
if ExtractFileExt(OpenPictureDialog1.FileName) = '.bmp' then
begin
Bmp:=TBitmap.create;
MYJpeg:= TJpegImage.Create;
MS:=TMemoryStream.create;
try
Bmp.LoadFromFile(OpenPictureDialog1.FileName);
with MYJpeg do
begin
Assign(Bmp);
MS.Position:=0;
SaveToStream(MS);
Table1.Edit;
TBlobField(Table1.FieldByName('ZGZP')).LoadFromStream(MS);
Table1.Post;
end;
finally
Bmp.Free;
MYJpeg.Free;
MS.Free;
end;
end
else
begin
fs:=TFileStream.Create(OpenPictureDialog1.FileName,fmOpenRead);
Try
Table1.Edit;
TBlobField(Table1.FieldByName('ZGZP')).LoadFromStream(fs);
Table1.Post;
Finally
fs.free;
end;
end;
end;

更详细看我的笔记:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=2931

 
后退
顶部