如何将Socket中接收到的图片数据流保存为jpg
VC代码:
LoadJpeg((BYTE*)pCtrl->listJpgBuff[pCtrl->PrevBuff].pBuff, pCtrl->listJpgBuff[pCtrl->PrevBuff].sizeBuff);
在Delphi中有没有相应方法? 求助
[解决办法]
我给你一个,这是我以前写的一个调用webservice 接口取得图片的方法,也是得到流后保存的。
var
iservice :DrvPictureImp;
ams:tmemorystream;
bcontent:tbytedynarray;
showcodestring:boolean;
isize:integer;
begin
if edit_clsbdh.Text='' then
begin
showmessage('请输入驾驶证号!');
exit;
end;
httprio1.WSDLLocation:='.\DrvPictureImp.xml';
httprio1.Service:='DrvPictureImpService';
httprio1.Port:='DrvPictureImp';
iservice:=httprio1 as DrvPictureImp;
bcontent:=iservice.getPictureMsgBySfzhm(edit_clsbdh.Text);
isize:=high(bcontent);
ams:=tmemorystream.Create;
try
if isize<=5 then
begin
showmessage('没有该驾驶证的照片信息,请确认驾驶证号号是否正确!');
iservice:=nil;
// ams.Free;
exit;
end
else
begin
ams.SetSize(isize);
move(bcontent[0],ams.memory^,isize);
ams.SaveToFile('print.jpg');
showmessage('下载完成!');
end;
iservice:=nil;
finally
ams.Free;
end;
[解决办法]
关键注意这里 fsRecv 是filestream
bufRecv是收到的字节,只需要保存到流里就可以直接存成文件
如果你的图片还需要做其他处理,可以考虑存到image或者bitmap中,然后在内存中自定一个tbitmap用copyrect 从canvas中复制处理完毕的图像再SaveToFile到文件中
GetMem(bufRecv,2000);//2000 must > iBYTESEND
Socket.ReceiveBuf(bufRecv^,iRecvLength);
fsRecv.WriteBuffer(bufRecv^,iRecvLength);