在SQL SERVER 中怎么处理图形(100分)

  • 主题发起人 主题发起人 群星
  • 开始时间 开始时间

群星

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有上万张图片,要进行分类查询与浏览,并且是存放在服务器上。
对于SQL SERVER 字段中只能处理BMP文件,由于受硬盘的空间太小限制,我希望能有
把BMP文件转换成JPG后函数处理后,再在存储到服务器的数据库上。
请与你联系!
 
不用,SQL SERVER 上定义一个IMAGE类型的字段,在DELPHI里对应一个BLOB字段,然后自己
写流就可以了,TJPEGImage.SaveToStream,还有TMetaFile(WMF EMF),TIcon 都可以处理,
如果有兴趣看一下各种图片的格式,在读出流的时候判断存放的是什么格式的图片,简便处流的
理可以在流的首位写一个整数或者字节(BYTE)作为标志(譬如BMP=1,JPEG=2,ICON=3,WMF=4)
然后在读出流的第一个字节或SIZEOF(INTEGER),这样就可以判定了,这种情况我有一个自己
写的TDBIMAGE控件,可以在一个字段里处理BMP JPEG GIF ICON WMF EMF格式的图片。
 
我同意上面的观点,而且sql2000已经引入了新的类型,可以接见.
 
你可以用IMAGE类型的字段,然后用流来操作,我也曾这样做过,但是,你说有上万个图片,
那估计这样做就不行了,因为这上万个图片放到数据库中,查询的会非常的慢,我曾经做过
这样的实验。我有另外一个办法,你可以试试。
把图片存到一个特定的目录下,然后把这个目录存到数据库里,当查询的时候把这个路径查
出来,然后再根据这个路径把图片找到再加载进来,不过我没试过,只是个想法,不知道效果
是不是好,你可以试试。
 
除非为了保密,不值得把图放入数据库。同意左右手的方法。
图片的取名很重要,要即直观,又能区别!
分不同目录也重要。
 
给你段代码参考一下
procedure Tfrm_sfxm.btnaddClick(Sender: TObject);
var
jpg:tjpegimage;
extname,fname:string;
begin
tblxmxgwj.Insert;
if OpenPictureDialog1.Execute then
begin
fname:=OpenPictureDialog1.FileName;
extname:=uppercase(extractfileext(fname));
if extname='.BMP' then DBImage1.Picture.LoadFromFile(fname);
if (extname='.JPG') or (extname='.JPEG') then
begin
jpg:=Tjpegimage.Create;
try
jpg.LoadFromfile(fname);
DBImage1.Picture.Graphic.Assign(jpg);
finally
jpg.Free;
end;
end;
end;

end;

 
你們的回答都有道理,可是呢?在轉換成JPG後呢?如果用通常的方式的話,SQl Server
字段會自動以點陣形式進行存儲,所以此方案還是行不通。
對於豐放在一個固定的目錄中,安全性問題沒有辦法解決!
謝謝
 
给你一个控件,dbimageex,可以向存储库中存储jpg,不会转化成bmp
Email?
 
to brave:
能给我那控件吗?
  lliuxxingw@163.net
谢谢。也可告诉我在那里下载也行.
 
to brave
我的E_MAIL是:Dtjs@163.com
 
建议尽量用jpg,用bmp的话,呵呵
有你受的[:(]
 
TO BRAVE
我的EMAIL是:jwh1228@163.com
 
后退
顶部