var strm: TMemoryStream; ext: String; begin if image1.picture.Graphic <> nil then //避免image1中无图像保存出错 begin ext:=extractfileext(openpicturedialog1.FileName ); //取出文件的扩展名 strm := tmemorystream.Create ; try image1.Picture.Graphic.SaveToStream(strm); querybase.Edit; strm.Position :=0; tblobfield(querybase.FieldByName('studentphotos')).LoadFromStream(strm); //如需直接由文件保存可采用如下注释行 //TBlobField(adotable1.FieldByName('myimage')).LoadFromFile(OpenPictureDialog1.FileName); //以下记录保存到数据库的图像格式 if uppercase(ext) = '.BMP' then querybase.FieldByName('isbmp').Value := 1 //BMP型图像数据 else if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') Then querybase.FieldByName('isbmp').Value := 0; //JPEG型图像数据 querybase.Post ; finally strm.Free ; //笔者发现如strm采用tblobstream类,程序运行到该语句会出现问题 end; end;
//写入 procedure TFrm_Main.N50Click(Sender: TObject); var strExtname:string; p:Pchar; FJpegImage:TJpegImage; FMemoryStream:TMemoryStream; begin if not OpenPictureDialog1.Execute then exit; setCurrentDir(ExtractFilePath(Application.ExeName)); FJpegImage := TJpegImage.Create; FMemoryStream := TMemoryStream.Create; p:=strRScan(Pchar(OpenPictureDialog1.FileName),'.'); strExtname:=string(strLower(p+1)); if strExtname='bmp' then begin Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName); Image1.Picture.Bitmap.SaveToStream(FMemoryStream); end else if (strExtname='jpg') or (strExtname='jpeg') then begin FJpegImage.LoadFromFile(OpenPictureDialog1.FileName); TJpegImage(Image1.Picture).Assign(FJpegImage); FJpegImage.Assign(Image1.Picture); FJpegImage.SaveToStream(FMemoryStream); end else begin showmessage('对不起!目前系统还不支持 '+strExtname+' 格式。'); FJpegImage.Free; FMemoryStream.Free; exit; end; ADOTable1.First; ADOTable1.Edit; ADOTable1.FieldByName('F_uploadTime').AsDateTime:=now(); ADOTable1.FieldByName('F_Type').AsString:=strExtname; FMemoryStream.Position := 0; TBlobField(ADOTable1.FieldByName('F_Picture')).LoadFromStream(FMemoryStream); ADOTable1.Post; FJpegImage.Free; FMemoryStream.Free; end;//读出 procedure TFrm_Main.showImage; var FJpegImage:TJpegImage; FMemoryStream:TMemoryStream; strExtname:string; begin FJpegImage := TJpegImage.Create; FMemoryStream := TMemoryStream.Create; if ADOTable1.IsEmpty then exit; ADOTable1.First; strExtname:=ADOTable1.FieldByName('F_Type').AsString; TBlobField(ADOTable1.FieldByName('F_Picture')).SaveToStream(FMemoryStream); FMemoryStream.Position := 0; if strExtname='bmp' then Image1.Picture.Bitmap.LoadFromStream(FMemoryStream) else if (strExtname='jpg') or (strExtname='jpeg') then begin FJpegImage.LoadFromStream(FMemoryStream); TJpegImage(Image1.Picture).Assign(FJpegImage); end else showmessage('出错!!!'); FJpegImage.Free; FMemoryStream.Free; end;
Ms:TmemoryStream;
Jpg:TJpegImage;
begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ADOquery1.append;
TBlobField(ADOquery1.FieldByName('img')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free ;
jpg.Free;
end;
读取到image中:
Var
Ms:TStringStream;
Jpg:TJpegImage;
begin
Ms:=TstringStream.Create('');
TBlobField(ADOquery1.FieldByName('img')).SaveToStream(Ms);
Ms.Position :=0;
Jpg.LoadFromStream(Ms);
Image2.Picture.Assign(Jpg);
jpg.Free;
Ms.Free;
end;uses jpeg
strm: TMemoryStream;
ext: String;
begin
if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
begin
ext:=extractfileext(openpicturedialog1.FileName ); //取出文件的扩展名
strm := tmemorystream.Create ;
try
image1.Picture.Graphic.SaveToStream(strm);
querybase.Edit;
strm.Position :=0;
tblobfield(querybase.FieldByName('studentphotos')).LoadFromStream(strm);
//如需直接由文件保存可采用如下注释行
//TBlobField(adotable1.FieldByName('myimage')).LoadFromFile(OpenPictureDialog1.FileName);
//以下记录保存到数据库的图像格式
if uppercase(ext) = '.BMP' then
querybase.FieldByName('isbmp').Value := 1 //BMP型图像数据
else
if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') Then
querybase.FieldByName('isbmp').Value := 0; //JPEG型图像数据
querybase.Post ;
finally
strm.Free ; //笔者发现如strm采用tblobstream类,程序运行到该语句会出现问题
end;
end;
procedure TFrm_Main.N50Click(Sender: TObject);
var
strExtname:string;
p:Pchar;
FJpegImage:TJpegImage;
FMemoryStream:TMemoryStream;
begin
if not OpenPictureDialog1.Execute then exit;
setCurrentDir(ExtractFilePath(Application.ExeName));
FJpegImage := TJpegImage.Create;
FMemoryStream := TMemoryStream.Create; p:=strRScan(Pchar(OpenPictureDialog1.FileName),'.');
strExtname:=string(strLower(p+1));
if strExtname='bmp' then
begin
Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.SaveToStream(FMemoryStream);
end
else if (strExtname='jpg') or (strExtname='jpeg') then
begin
FJpegImage.LoadFromFile(OpenPictureDialog1.FileName);
TJpegImage(Image1.Picture).Assign(FJpegImage);
FJpegImage.Assign(Image1.Picture);
FJpegImage.SaveToStream(FMemoryStream);
end
else
begin
showmessage('对不起!目前系统还不支持 '+strExtname+' 格式。');
FJpegImage.Free;
FMemoryStream.Free;
exit;
end; ADOTable1.First;
ADOTable1.Edit;
ADOTable1.FieldByName('F_uploadTime').AsDateTime:=now();
ADOTable1.FieldByName('F_Type').AsString:=strExtname;
FMemoryStream.Position := 0;
TBlobField(ADOTable1.FieldByName('F_Picture')).LoadFromStream(FMemoryStream);
ADOTable1.Post; FJpegImage.Free;
FMemoryStream.Free;
end;//读出
procedure TFrm_Main.showImage;
var
FJpegImage:TJpegImage;
FMemoryStream:TMemoryStream;
strExtname:string;
begin
FJpegImage := TJpegImage.Create;
FMemoryStream := TMemoryStream.Create; if ADOTable1.IsEmpty then exit; ADOTable1.First;
strExtname:=ADOTable1.FieldByName('F_Type').AsString;
TBlobField(ADOTable1.FieldByName('F_Picture')).SaveToStream(FMemoryStream);
FMemoryStream.Position := 0;
if strExtname='bmp' then
Image1.Picture.Bitmap.LoadFromStream(FMemoryStream)
else if (strExtname='jpg') or (strExtname='jpeg') then
begin
FJpegImage.LoadFromStream(FMemoryStream);
TJpegImage(Image1.Picture).Assign(FJpegImage);
end
else
showmessage('出错!!!'); FJpegImage.Free;
FMemoryStream.Free;
end;