为了显示SQL Server数据库中的jpg图片到image中,写了如下代码:
保存image1里面的图片
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGIMage.Create;
MS:=TMemoryStream.Create;
try
MyJPEG.Assign(Image1.picture.bitmap);
MyJPEG.SaveToStream(MS);
MS.position:=0;
Adotable1.Append;
Adotable1.FieldByName('编号').AsVariant := 2;
TBlobField(Adotable1.FieldByName('照片')).savetostream(MS);
AdoTable1.Post;
finally
MyJPEg.free;
MS.free;
end;
Showmessage('保存完毕!');显示数据库中的图片,此时返回Jepg Error #41,不知是什么原因错误了,请指点!
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGIMage.Create;
MS:=TMemoryStream.Create;
try
TBlobField(ADOQuery1.FieldByName('照片')).savetostream(MS);
MS.position:=0;
MyJPEG.LoadFromStream(MS);
Image1.picture.Bitmap.assign(MyJPEG);
finally
MyJPEg.free;
MS.free;
end;
end;
保存image1里面的图片
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGIMage.Create;
MS:=TMemoryStream.Create;
try
MyJPEG.Assign(Image1.picture.bitmap);
MyJPEG.SaveToStream(MS);
MS.position:=0;
Adotable1.Append;
Adotable1.FieldByName('编号').AsVariant := 2;
TBlobField(Adotable1.FieldByName('照片')).savetostream(MS);
AdoTable1.Post;
finally
MyJPEg.free;
MS.free;
end;
Showmessage('保存完毕!');显示数据库中的图片,此时返回Jepg Error #41,不知是什么原因错误了,请指点!
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGIMage.Create;
MS:=TMemoryStream.Create;
try
TBlobField(ADOQuery1.FieldByName('照片')).savetostream(MS);
MS.position:=0;
MyJPEG.LoadFromStream(MS);
Image1.picture.Bitmap.assign(MyJPEG);
finally
MyJPEg.free;
MS.free;
end;
end;
解决方案 »
- 当ListView滚动时,怎样保证背景图像不滚动及不闪烁?
- 动态批量生成的Form如何单独设置Caption属性?
- RichEdit中的文本存入txt文件的问题?
- 两个数据表相关联的问题!急,在线等待!
- 请问如何把 real型 转换成 integer型?
- 在线急问!!!关于TImage控件
- 如何提取字符串中的部分字符串,例如提取'33 23 43'中的 '33' ,'23' ,'43' 。
- 请问各位大虾,如何加入MSComm认证信息?
- Delphi Ado 讨论!
- Delphi7 没有ExcelApplication1.Workbooks[1].Activate方法
- 如何得到Frame所在窗体的名称,很简单。
- 在哪可找到比较好的DELPHI源程序代码
TBlobField(Adotable1.FieldByName('照片')).LoadFromStream(MS);你原来的语句并没有把图片写进数据库,读取时是空的,就报错了。
MyJPEG.Assign(Image1.picture.Graphic);
你的语句取的是Bitmap,没有数据的。
当然,你后面的语句也错了。应当是:
Image.Picture.Graphic.LoadFromStrea(好像是这么写的)
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGIMage.Create;
MS:=TMemoryStream.Create;
try
MyJPEG.Assign(Image1.picture.bitmap);
MyJPEG.SaveToStream(MS);
MS.position:=0;
Adotable1.Append;
Adotable1.FieldByName('编号').AsVariant := 2;
TBlobField(Adotable1.FieldByName('照片')).LoadFromStream(MS);
AdoTable1.Post;
finally
MyJPEg.free;
MS.free;
end;
Showmessage('保存完毕!');
end;但是读取的时候还是发生 Jepg Error #41 错误。
如果按 jufeng_zhu 的方法把
MyJPEG.Assign(Image1.picture.bitmap);改为MyJPEG.Assign(Image1.picture.Graphic);
将无法保存该图片到SQL Server数据库,出错信息为"Bitmap image is not valid"
请问是什么原因啊?
MyJPEG.Assign(image1.picture.Bitmap);
MyJPEG.CompressionQuality:=100;
MyJPEG.Compress;
试试
jpgstream.Assign(image1.picture.Bitmap);
jpgstream.CompressionQuality:=100;
jpgstream.Compress;
Stream:=TMemoryStream.Create;
jpgstream.SaveToStream(Stream);
Stream.Position:=0;
ADODataSet2.append;
TBlobField(ADODataSet2.FieldByName(b3)).LoadFromStream(Stream);
ADODataSet2.Post;我的保存jpg的全部代码!
MyJPEG.CompressionQuality:=100;
MyJPEG.Compress;
还是报错啊,图片不能在image1里面显示出来
你能把你的显示jpg的代码给我看看吗?
var
jpgstream:TJPEGImage;
Stream: TMemoryStream;
begin
try
Stream:=TMemoryStream.Create;
TBlobField(ADODataSet2.FieldByName(b3)).SaveToStream(Stream);
Stream.Position:=0;
jpgstream:= TJPEGImage.Create;
jpgstream.LoadFromStream(Stream);
image2.Picture.Assign(jpgstream);
finally
Stream.Free;
jpgstream.Free;
end;
end;
调jpg得全部代码!
给分吧!
procedure Tscanfrm.Button14Click(Sender: TObject);
var
jpgstream:TJPEGImage;
Stream: TMemoryStream;
idh:pchar;
begin
if MessageDlg('保存此图片,请确认!',mtWarning,[mbYes, mbNo],0)=mrno then exit;
StatusBar1.Panels[0].Text:='正在保存文件';
StatusBar1.Refresh;
jpgstream:= TJPEGImage.Create;
jpgstream.Assign(image1.picture.Bitmap);
jpgstream.CompressionQuality:=100;
jpgstream.Compress;
with ADODataSet2 do
begin
if key.Text='0' then append else edit ;
FieldValues[b1]:=ly.Text;
FieldValues[b2]:=ly.Tag;
end;
try Stream:=TMemoryStream.Create;
jpgstream.SaveToStream(Stream);
Stream.Position:=0;
TBlobField(ADODataSet2.FieldByName(b3)).LoadFromStream(Stream);
ADODataSet2.Post;
finally
jpgstream.Free;
StatusBar1.Panels[0].Text:='宽度:'+inttostr(image1.Picture.Width)+' 高度:'+inttostr(image1.Picture.height);
end;
if key.text='0' then
begin
ADODataSet2.Last;
pages.Caption:=inttostr(strtoint(pages.Caption)+1);
page.caption:=pages.Caption
end;
key.text:=idh;
end;从数据库读出jpg文件,并存为bmp.
procedure Tscanfrm.keyChange(Sender: TObject);
var
jpgstream:TJPEGImage;
Stream: TMemoryStream;
begin
if key.Text<>'0' then
begin
try
Stream:=TMemoryStream.Create;
TBlobField(ADODataSet2.FieldByName(b3)).SaveToStream(Stream);
Stream.Position:=0;
jpgstream:= TJPEGImage.Create;
jpgstream.LoadFromStream(Stream);
image2.Picture.Assign(jpgstream);
image1.Picture.Bitmap.Width:=image2.picture.Width;
image1.Picture.Bitmap.Height:=image2.picture.Height;
image1.Left:=0;
image1.Top:=0;
image1.Picture.Bitmap.Canvas.Draw(0,0,image2.Picture.Graphic);
image1.Width:=image2.Picture.Width;
image1.Height:=image2.Picture.Height;
page.Caption:=inttostr(adodataset2.RecNo );
pages.Caption:=inttostr(adodataset2.RecordCount);
finally
Stream.Free;
jpgstream.Free;
image2.Picture:=nil;
end;
cmddel.Enabled:=true;
Button14.Enabled:=true;
end
else
begin
cmddel.Enabled:=false;
Button14.Enabled:=false;
image1.Picture:=nil;
image2.Picture:=nil;
page.Caption:='0';
pages.Caption:='0';
StatusBar1.Panels[0].Text:=''; end;
end;
以上是我的全部代码,运行n遍了,绝对没问题,如果在出错说明是你哪写得不对,多试试
我这也是经过多次试验才得出来的!
另外在user加上jpeg