读取Oracle中的图像 (30分)

  • 主题发起人 主题发起人 YuD
  • 开始时间 开始时间
Y

YuD

Unregistered / Unconfirmed
GUEST, unregistred user!
有困难希望得到高手相助。 现有一Oracle数据库,其中的一个表保存jpeg图像,
结构为 代码 char 12
编号 number 2,0
照片 long raw
存储的方式有些特别:把一幅图像分成多条纪录保存,纪录数不定,现在我想把
图像重新读取出来,请高手指点我该怎样实现。
需要说明一点:当单条纪录显示时出错。 也就是说保存时并不是先把大图像分成
若干小图像载保存那么简单。
谁能帮助解决,在家120分
 
先读到若干个TPicture中,在合并
没有试过,回家试试,明天看看可不可以给你个sample
 
为什么要这么做呢? 你可以直接把它存在一个Blob字段里面,除非你的图片大于2G
但我想应该不会有这么大的图片吧

非要这么做的话你可以先所各条记录的内容按顺序读到一个Stream,再把Stream赋给控件
 
我同意 xianjun 的做法!
 
在oracle中使用blob字段可以存放图像字段.
读写都可以使用stream的,
但是要记住不要用MS的ADO来连接oracle的blob字段.
可以用bde或oracle自己的ado.
lob
 
得到信息说:在图像保存时,按固定大小把图像分成多个小块之后安先后顺序保存的。我
以前没搞过图像编程,请有经验的高手指点迷津,分是不会少给大家的。谢谢。
 
那跟我原来想的就一样了
照我上面说的做应该就没问题了。
 
to xianjun:给个Demo 好吗?
 
论坛里面特别多,你用stream查一查。
 
没测试过的代码:

var
MS, PicStream: TMemoryStream;
begin
PicStream := TMemoryStream.Create;
try
ADODataSet1.First;
MS := TMemoryStream.Create;
try
while not ADODataSet1.Eof do
begin
MS.Clear;
TBlobField(ADODataSet1.FieldByName('PIC')).SaveToStream(MS);
PicStream.Position := PicStream.Size;
PicStream.Write(MS.Memory^, MS.Size)
ADODataSet1.Next;
end;
finally
MS.Free;
end;
Image1.Picture.Bitmap.LoadFromStream(PicStream);
finally
PicStream.Free;
end;
 
谢谢各位,在各位的指导下,终于搞定了。
用的是bde(我的ADO测试时OK可是在程序中就是连不上),特别感谢XianJun,您提供了
Ado的方法,让我多学了很多东西。我开个贴字在给你120(说话算话)。
下面是我的测试代码请指点:

procedure TForm1.Button1Click(Sender: TObject);
begin
while not Query1.Eof do
begin
TBlobField(Query1.FieldByName('照片')).SaveToStream(st);
// edit2.Text:=inttostr(st.Size);
// edit1.Text:=Query1.fieldbyname('编号').asstring;
Query1.Next;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if SavePictureDialog1.Execute then
begin
st.Position :=0;
jp.LoadFromStream(st);
jp.SaveToFile(SavePictureDialog1.FileName);
end;
end;
 
后退
顶部