VC代码:LoadJpeg((BYTE*)pCtrl->listJpgBuff[pCtrl->PrevBuff].pBuff, pCtrl->listJpgBuff[pCtrl->PrevBuff].sizeBuff);
 
在Delphi中有没有相应方法? 求助

解决方案 »

  1.   

    你都得到流了,就用memoerystream保存文件就是了
      

  2.   

    如果PrevBuff你已经得到,就用Move把他copy倒Memorystream中,然后保存文件
      

  3.   

    你自己把VC的实例 翻译成Delphi版的就好了#1,#2 也给你说了关键的部分怎么保存。
      

  4.   

     VC 中LoadJpeg方法是在Cimage中的系统封装好的类库 。没办法翻译啊!问题是不知道 怎么保存下来! 给个小例子。谢谢
      

  5.   

    delphi的image也可以加载刘,不许保存为文件
      

  6.   

    我给你一个,这是我以前写的一个调用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;
      

  7.   

    一个简单的例子,网上随便找的
    Server程序:
    放上以下控件:SaveDialog1,btnStartServer,
    ss,(TServerSocket)btnStartServer.OnClick(Sender:TObject);
    begin
    ss.Port:=2000;
    ss.Open;
    end;ss.OnClientRead(Sender:   TObject;Socket:   TCustomWinSocket);
    var
    sTemp:string;
    bufRecv:Pointer;
    iRecvLength:integer;
    begin
    if   bReadText   then
    begin
    sTemp:=Socket.ReceiveText;
    case   sTemp[1]   of
    MP_QUERY:begin
    //在这里拒绝  
    SaveDialog1.FileName:=Copy(sTemp,2,Length(STemp));
    if   SaveDialog1.Execute   then
    begin  
    Socket.SendText(MP_ACCEPT);
    fsRecv:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
    end
    else   Socket.SendText(MP_REFUSE+’去死’);
    end;
    MP_FILEPROPERTY:begin
    //要发送StrToInt(Copy(sTemp,2,Length(sTemp)))   次
    //时间进度显示
    Socket.SendText(MP_NEXTWILLBEDATA);
    end;
    MP_NEXTWILLBEDATA:begin
    Socket.SendText(MP_DATA);
    bReadText:=false;
    end;
    MP_END:begin
    fsRecv.Free
    bReadText:=true;
    end;
    MP_ABORT:begin
    fsRecv.Free;  
    bReadText:=true;  
    end;
    MP_CHAT:begin
    //Chat   Msg
    end;
    end;{of   case}
    end
    else   begin
    try
    GetMem(bufRecv,2000);//2000   must   > iBYTESEND
    Socket.ReceiveBuf(bufRecv^,iRecvLength);
    fsRecv.WriteBuffer(bufRecv^,iRecvLength);
    finally
    FreeMem(bufRecv,2000);
    end;{of   try}
    bReadText:=true;
    Socket.SendText(MP_NEXTWILLBEDATA);
    end;
    end;Client程序:
    放上以下控件:edtIPAddress,OpenDialog1,btnConnect,btnSendFile,
    cs.   (TClientSocket)btnConnect.OnClick(Sender:TObject);
    begin
    cs.Address:=edtIPAddress.Text;
    cs.Port:=2000;
    cs.Connect;
    end;btnSendFile.OnClick(Sender:TObject);
    begin
    if   OpenDialog1.Execute   then
    Begin
    cs.Socket.SendText(MP_QUERY+OpenDialog1.FileName);//FileSize???
    end;  
    end;cs.OnRead(Sender:   TObject;Socket:   TCustomWinSocket);
    var
    sTemp:string;
    bufSend:pointer;
    begin
    sRecv:=Socket.ReceiveText;
    Case   sRecv[1]   of
    MP_REFUSE:ShowMessage(’Faint,be   refused!’);
    MP_ACCEPT:begin
    fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpen);
    //iBYTEPERSEND是个常量,每次发送包的大小。
    Socket.SendText(MP_FILEPROPERTY+Trunc(fsSend.Size/iBYTEPERSEND)+1);
    end;
    MP_NEXTWILLBEDATA:begin
    Socket.SendText(MP_NEXTWILLBEDATA);
    end;
    MP_DATA:begin
    try
    GetMem(bufSend,iBYTEPERSEND+1);
    if   (fsSend.Position+1+iBYTEPERSEND)   <   fsSend.Size   then
    begin
    fsSend.Read(bufSend^,iBYTEPERSEND);
    Socket.SendBuf(bufSend^,iBYTEPERSEND);
    fsSend.Free;
    end//普通的发送,大小为iBYTEPERSEND
    else   begin
    fsSend.Read(bufSend^,fsSend.Size-fsSend.Position-1);
    Socket.SendBuf(bufSend^,fsSend.Size-fsSend.Position-1);
    end;//最后一次发送,发送剩余的数据
    finally
    FreeMem(bufSend,iBYTEPERSEND+1);
    end;{of   try}
    end;
    MP_ABORT:begin
    //被取消了:(
    fsSend.Free;
    end;
    end;{of   case}
    end;
      

  8.   

    关键注意这里 fsRecv 是filestreambufRecv是收到的字节,只需要保存到流里就可以直接存成文件
    如果你的图片还需要做其他处理,可以考虑存到image或者bitmap中,然后在内存中自定一个tbitmap用copyrect 从canvas中复制处理完毕的图像再SaveToFile到文件中GetMem(bufRecv,2000);//2000 must > iBYTESEND
    Socket.ReceiveBuf(bufRecv^,iRecvLength);
    fsRecv.WriteBuffer(bufRecv^,iRecvLength);