请问谁能解决JPEG文件的保存问题?(50分)

  • 主题发起人 主题发起人 莞尔
  • 开始时间 开始时间

莞尔

Unregistered / Unconfirmed
GUEST, unregistred user!
请问谁能解决JPEG文件的保存问题?数据库为SQL-Server。
直接保存只能保存bmp格式的文件,如何将JPEG文件转换后保存?
 
用流保存或读取
 
呵呵,乱说,SQL-Server又不认识什么是BMP,什么是JPG,
它只是当作二进制的东西保存,至于是什么格式,你自己决定的
你都可以写进数据库的
DBImage不认Jpg的,那是控件不支持,没有办法,你可以自己做的
 
楼上很对!
 
是delphi本身不支持JPG格式。
除了第三方控件之外,还有其他方法吗?
pengjinlongex, 我在其他地方也听人说过用流来保存和读取,可是具体该怎麽做?
请指教!多谢了。
 
我也碰到过这个问题就是用下面的方法处理的。

var bitmap:tbitmap;
bitmap:=tbitmap.Create;
bitmap.Assign(image1.Picture.Graphic); //将图片内容转换成BMP格式
// 再对bitmap的内容进行保存
 
仔细看看我的代码,理解了就OK了,谁说DELPHI不支持JPG,现在的年轻人真感唠
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
t1 : TTable;
mstream1 : TMemoryStream;
// jpeg : TJPEGImage;
begin
// jpeg := TJPEGImage.Create ;
t1 := TTable.Create(nil);
t1.DatabaseName := db1.DatabaseName ;
t1.TableName := 'T_BASE';
t1.Open;
t1.First ;
while not t1.Eof do
begin
if t1.FieldByName('id').AsInteger = nCurrentRec then
begin
mstream1 := TMemoryStream.Create;
// TBlobField(t1.FieldByName('image')).SaveToFile('c:/temp.bmp');
// imageBase.Picture.Bitmap.LoadFromFile('c:/temp.bmp');
TBlobField(t1.FieldByName('image')).SaveToStream(mstream1) ;
mstream1.Position := 0;
// TBlobField(t1.FieldByName('image')).SaveToFile ('c:/2.jpg');
// imageBase.Picture.LoadFromFile('c:/2.jpg');
imageBase.Picture.Bitmap.LoadFromStream(mstream1);//bmp文件
// jpeg.LoadFromStream(mstream1);//JPEG文件
// imageBase.Picture.Assign(jpeg);
// imageBase.Picture.Bitmap.SaveToFile('c:/temp.bmp');
{ if OpenDialog1.Execute then
begin
if FileExists(OpenDialog1.FileName) then
begin
imageBase.Picture.LoadFromFile(OpenDialog1.FileName);
end;
end;}
imageBase.AutoSize := true;
DBGrid1.Visible := false;
imageBase.Show ;
imageBase.OnClick := imageBaseClick;
mstream1.Free ;
end;
t1.Next;
end;
t1.Close;
t1.Free;
end;
 
跟文件格式有什么关系?用Image字段的LoadFromFile命令不是不管什么文件都可以保存?
TBlobField(Dataset.fieldByname('ImageFiled')).LoadFromFile(fileName);
 
我的方法和HunterTeam一样!
我也是这样的!!!!
其实方法很多多!
 
wangjiankang,你的程序我调试后编译通过,也能运行,可图片为保存进库中,是否我改动的
地方不正确,请您解释一下imagebase,我将其换成了image,可...没保存进去嘛。
请指教,多谢!
另外,HunterTeam和Admy方法我也试过,总提示错误‘bitmap image is not valid’请指示。
多谢各位大侠了!
 
为什么非要用Image控件呢? 你用TFileStream直接当作字节流保存不就得了?
管它jpg,bmp
 
procedure TPhotoForm.XPButton1Click(Sender: TObject);
var
jpeg:tjpegimage;
s:string;
begin
if image2.tag=0 then
begin
showmessage('dd');
exit;
end;
s:=extractfilepath(application.ExeName)+'jpeg.jpg';
jpeg:=tjpegimage.Create ;
jpeg.Assign(Image2.Picture);
jpeg.CompressionQuality :=75;
jpeg.Compress ;
jpeg.SaveToFile(s);
if dm.DS_ygphoto.Active then
begin
if form1.Image1.Tag =0 then
begin
dm.DS_YGPHOTO.Insert ;
dm.DS_YGPHOTO.FieldByName('bh').AsString :=dm.DS_YGhmc.fieldbyname('bh').AsString ;
tblobfield(dm.DS_YGPHOTO.FieldByName('photo')).LoadFromFile(s);
end;
if form1.Image1.tag =1 then
begin
dm.DS_YGPHOTO.Edit ;
tblobfield(dm.DS_YGPHOTO.FieldByName('photo')).LoadFromFile(s);
end;

dm.DS_YGPHOTO.Post;
end;
freeandnil(jpeg);
end;
 
var
MyJpeg: TJpegImage;
bmp: Tbitmap;
begin
bmp:=tbitmap.Create;
MyJpeg:= TJpegImage.Create;
myjpeg.LoadFromFile('c:/windows/desktop/aa.jpg');
bmp.Assign(myjpeg);
bmp.SaveToFile('c:/windows/desktop/test.bmp'); // Save the JPEG to Disk
end;
 
这是新增的例子,这里的‘IMAGE’是个字段名,IMAGEBASE是个TIMAGE控件
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
t1 : TTable;
begin
t1 := TTable.Create(nil);
t1.DatabaseName := db1.DatabaseName ;
t1.TableName := 'T_BASE';
t1.Open;
t1.First ;
while not t1.Eof do
begin
if t1.FieldByName('id').AsInteger = nCurrentRec then
begin
if OpenDialog1.Execute then
begin
if FileExists(OpenDialog1.FileName) then
begin
t1.Edit;
TBlobField(t1.FieldByName('image')).LoadFromFile(OpenDialog1.FileName);
t1.Post ;
end;
end;
end;
t1.Next;
end;
t1.Close;
t1.Free;
end;
 
一.在数据表中建立一个长二进制字段
二.将要保存的图片保存成一个jpg的图片文件
三.以文件形式将这个图片文件存入表中的长二进制字段
 
多谢各位大虾,问题已经解决!
 
多谢各位大虾,问题已经解决!
 
问题已经解决,可能出现问题了,我无法分配积分,带我询问了斑竹后再分配积分,再次多谢各位了!
 
快给分吧
谢谢
 
后退
顶部