关于将 jpeg 格式的图像文件存入 SQLServer 7.0 中的问题(200分)

  • 主题发起人 主题发起人 王少东
  • 开始时间 开始时间

王少东

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库为 SQLServer 7.0 图像字段类型为 Image

问题一:
Table->Open();
Table->Edit();
DBImage->Picture->LoadFromFile("c://a.bmp");
Table->Post();
DBImage 控件显示图像

Table->Open();
Table->Edit();
DBImage->Picture->LoadFromFile("c://a.jpg");
Table->Post();
DBImage 控件不显示图像,即图像载入失败,为什么?

问题二:
TJPEGImage *jp = new TJPEGImage();
jp->LoadFromFile("c://a.jpg");
DBImage->Picture->Graphic->Assign(jp);
Label1->Caption = DBImage->Picture->Graphic->ClassName();--用于查看图形格式
delete jp;
DBImage 控件显示图像,即图像载入成功,但是通过 DBImage->Picture->Graphic->ClassName()
的返回值得知存入库中的图形格式为 TBitmap , 而不是 TJPEGImage 格式,为什么?
本人提出这个问题是为了想解决这样一个实际问题:
本人编写了一个软件,其中用到了浏览数据库中的图片功能,但是,存入库中的图形
为24位的 Bmp 格式的图片,每个图片大小为320K左右,在客户端连续浏览时每幅图片之间
产生大约半分钟的等待现象,十分不便,为了降低在网络间的图片数据传输量,将 bmp 格式
的图片转换成了只有 30K 左右大小的 jpg 格式的图片文件, 但是,通过上述程序发现转入
库中的图片,似乎还是 bmp 格式, 达不到降低图片大小的目的,不知那位朋友有法能解决
这个问题,望不吝赐教,谢谢!!

问题三:
如何编程解决 jpg 格式图片的旋转问题( 如:90度,180 度 )?
 
DBImage 控件只能显示bmp图片数据,jpg的不能用DBImage .
关于jpg的数据存取,可以先将其转为流,然后将其存入Blob数据库。
读出时,过程相反
Image1.Picture.Graphic.loadfromstream(ms);
写入:
//************************************
var
MS: TMemoryStream;
begin
MS:=TMemoryStream.create;
Image1.Picture.Graphic.SaveToStream(MS);
MS.Position:=0;
Table1.Append;
//在数据库中添加一条记录
TBlobField(Table1.FieldbyName
('image')).LoadFromStream(MS);
Table1.Post;
//将所作的更新写入数据库
end;
//**************************
读出:
//*************************
var
MS: TStream;
begin
with Table1 do
MS:=CreateBlobStream
(FieldbyName('image'),bmRead);
Image1.Picture.Graphic.
LoadFromStream(MS);
MS.Free;
end;
//**************************
 
回复:iapollo
给出的程序写入部分没问题,但读出部分的下列语句有问题:
Image1.Picture.Graphic.LoadFromStream(MS);
在执行时出错,而且不管是bmp图片流还是jpg图片流,我试过都不行.
 
因为IMAGE默认的是BMP的,所以你得在Picture属性中先改一下为JPEG.
RegisterFileFormat('JPG','JPG','TJPEGIMAGE');
 
你先查一下吧。
 
回复:dadabox
通过执行 RegisterFileFormat('JPG','JPG','TJPEGIMAGE') 后,还是出错,本人查了一下
RegisterFileFormat 的帮助信息, 好象该方法是用于指定 LoadFromFile 载入的文件格式,
而不是用于指定 LoadFromStream 的。


 
to 王少东:
最简单的解决方法:找一万能图片格式显示控件,安装以后先在Image中放一jpg图片,
以后利用此Image存放显示均没一点问题!
 
万能图象显示控件那里有?
 
procedure TForm1.Button2Click(Sender: TObject);//保存
var
msmem:TmemoryStream;
jpg:TJpegImage;
begin
if not DBImage1.Picture.Graphic.Empty then
begin
msmem:=TmemoryStream.Create;
Jpg:=TjpegImage.Create;
jpg.Assign(DBImage1.Picture.Graphic);
jpg.SaveToStream(msmem) ;
msmem.Position :=0;
DataModule1.ADOTable1.Edit;
TBlobField(DataModule1.ADOTable1.FieldByName('photo')).LoadFromStream(msmem);
DataModule1.ADOTable1.Post ;
Msmem.Free ;
jpg.Free;
end;
end;
//读取
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
ms:TStringStream;
Jpg:TJpegImage;
begin
if not DataModule1.ADOTable1.FieldByName('photo').IsNull then
begin
ms:=TstringStream.Create('');
Jpg:=TJpegImage.Create;
TBlobField(DataModule1.ADOTable1.FieldByName('photo')).SaveToStream(ms);
jpg.LoadFromStream(ms);
ms.Position :=0;
Jpg.LoadFromStream(ms);
DBImage1.Picture.Assign(Jpg);
 
后退
顶部