请教一个关于图片存储的问题啊
TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片
会报错:bitmap image is not valid
是否要求存入流里的必须是bitmap格式???
我现在的需求是,支持bitmap,jpg,jpeg格式图片存储,若为bitmap格式则转换为jpg格式再存入数据库。求代码
TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片
会报错:bitmap image is not valid
是否要求存入流里的必须是bitmap格式???
我现在的需求是,支持bitmap,jpg,jpeg格式图片存储,若为bitmap格式则转换为jpg格式再存入数据库。求代码
解决方案 »
- 关于第三方控件
- delphi中 有比idhttp.get更快速的获取网页内容的方法吗?
- MDI登录问题:index out of bound(0)
- 一个很弱智的问题
- DELPHI取ASCII的问题。
- 一个菜鸟的简单问题,还请大家解答
- 请教各位高手,我想编一个网络版的数据库程序,可是从没有接触过,
- 请问数据库用Access,但不用ODBC连,不知怎么弄?(只有这么多分了,全部献上)
- delphi多线程的问题,希望得到帮助,很急~~谢谢
- 寻 支持delphi6的 条码打印控件
- 请问:在DELPHI中如何实现:用户在几个edit编辑框内输入任意几个数字,然后点击“计算”按钮后,将计算结果显示在Lable上。然后点击“保存”按钮,将计算结果保存在数据库中计算公式是固定的。请给我代码,谢谢
- 关于从注册表中获取系统安装日期
var
mStream:TMemoryStream;
JpgFile:TjpegImage;
jbmp:TBitmap;
begin
//-----------向数据库加班图片
adoquery1.Append;
mstream:=TMemoryStream.Create;
JpgFile:=TjpegImage.Create ;
jbmp:=TBitmap.Create; if OpenDialog.Execute then
begin
try
mstream.LoadFromFile(OpenDialog.FileName);
mStream.Position :=0; if uppercase(extractfileext(OpenDialog.FileName))='.BMP' then begin
jbmp.LoadFromStream(MStream);
adoQuery1.FieldByName('xp').Assign(jbmp);
end else begin if (uppercase(extractfileext(OpenDialog.FileName))='.JPG') OR
(uppercase(extractfileext(OpenDialog.FileName))='.JPEG') then
jpgfile.LoadFromStream(MStream);
adoQuery1.FieldByName('xp').Assign(JpgFile); end; adoquery1.Post;
finally
jpgfile.Free;
jbmp.Free;
mstream.Free;
end;
end;
end;
请仔细看一下我的需求:
支持bitmap,jpg,jpeg格式图片存储,若为bitmap格式则转换为jpg格式再存入数据库。求代码
jbmp.Assign(jpgfile)
adoQuery1.FieldByName('xp').Assign(jbmp);
begin
ext:=ExtractFileExt(OpenDialog_ks.FileName ); //取出文件的扩展名
if (uppercase(ext) = '.BMP') or (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') then
begin
Image1.Picture.LoadFromFile(OpenDialog_ks.FileName );
if Image1.picture.Graphic <> nil then
begin
filename:= ExtractFileName(OpenDialog_ks.FileName); //取出文件的名
word_stream := TMemoryStream.Create;
try
if not (ADOQueryKS.State in [dsEdit,dsInsert]) then
ADOQueryKS.Edit ;
if uppercase(ext) = '.BMP' then
begin
MyBMP := TBitmap.Create;
with MyBMP do
try
Assign(Image1.Picture.Bitmap);
MyJPEG := TJPEGImage.Create;
with MyJPEG do
begin
Assign(MyBMP);
CompressionQuality:=100; //压缩比例
Compress;
SaveToStream(word_stream);
p:=pos('.',filename); //更改文件名
savename:=Copy(filename,0,p)+'jpg';
Savetofile(savename);
Image1.Picture.Graphic.Assign(MyJPEG);
Free;
end;
ADOQueryKS.FieldByName('filename_image').Value:=savename;
word_stream.Position:=0;
word_stream.LoadFromFile(savename);
finally
Free;
end;
end
else
begin
Image1.Picture.Graphic.SaveToStream(word_stream);
ADOQueryKS.FieldByName('filename_image').Value:=filename; //保存图片名
end;
TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片???报错:bitmap image is not valid
finally
word_stream.Free;
end;
end;
end
else
begin
showmessage('您选择的文件格式无效,请重新选择正确的图片格式!');
abort;
end;
end;
好,先发给我看一下,多谢!
[email protected]
会报错:bitmap image is not valid,我分析可能是因为'style_image'字段绑定了数据感知控件(且此控件只能显示Bmp格式的图片)bitmap格式则转换为jpg很简单:
uses
jpeg;
function BmpToJpg(bmpSource: TBitmap): TJPEGImage;
begin
Result := TJPEGImage.Create;
Result.Assign(bmpSource);
end;
会报错:bitmap image is not valid,我分析可能是因为'style_image'字段绑定了数据感知控件(且此控件只能显示Bmp格式的图片)bitmap格式则转换为jpg很简单:
uses
jpeg;
function BmpToJpg(bmpSource: TBitmap): TJPEGImage;
begin
Result := TJPEGImage.Create;
Result.Assign(bmpSource);
end;