none
HTTP chttpfile 收到的二进制数据流(图片PNG格式),如何处理还原并显示图片? RRS feed

答案

全部回复

  • 最简单的办法是把Buffer里面的数据放到一个IStream里,再用GDI+里面的Image类的相关函数就可以了
    Hello world
    2009年2月12日 11:55
    版主
  • 2009年2月12日 15:43
    版主
  •  谢谢Sheng Jiang 老大,和一楼的朋友,自己有思路了。
    2009年2月13日 10:25
  •  又有问题了,我从得到了图片(PNG格式)的网址,自己用chttpfile接受代码如下:
     CString strPng;
     CString strData;
     while (pHttpFile->ReadString(strData))
       {
        strPng=strPng+strData;
    }
     try
       { 
        
        DWORD len=strPng.GetLength();
        
        hMem=GlobalAlloc(GMEM_MOVEABLE,len);
        LPVOID pData=NULL; 
        pData=GlobalLock(hMem)
        pData=(LPVOID)(LPCTSTR)strPng;
        pHttpFile->Close();
        GlobalUnlock(hMem);
        CreateStreamOnHGlobal(hMem,true,&m_pStream);
        m_pImage=Image::FromStream(m_pStream,true);
        CDC * dc=this->GetDC();
        Graphics graph(dc->m_hDC);
        graph.DrawImage(m_pImage,10,10);

       }
       catch (CException* e)
       {
        
        TCHAR   szErr[1024]={0};
        e->GetErrorMessage(szErr,1024);
           e->Delete();
        return  0;
        
       }
       len=strPng.GetLength();得到的值总是比浏览器的图片的字符数少许多,是不是Png图片在网络中的传输是压缩过的?如何是压缩的,希望能指出是什么压缩,最好能给点解压的资料, 如果不是压缩的,希望能指出错误,谢谢。

    2009年3月10日 11:05
  • 不要用ReadString来读二进制数据。
    MSMVP VC++
    2009年3月10日 13:41
    版主
  •  

    我用了下面的方法接受图片的数据:
      int x=0;
       int y=0;
       while (x=pHttpFile->Read((void *)pbuf,5000))
       {
        y=x+y;
        strPng+=pbuf;
     }
    Read是以/0结束的,但我读的图片里有很多/0,所以只能读一小部分,循环就结束了,后面的大部分数据没有读出,哪为能给个思路,把整个图片读出,谢谢了。

    2009年3月10日 18:39
  • 不要用CString来存储二进制数据。
    MSMVP VC++
    2009年3月10日 19:12
    版主
  •  蒋老师,我把代码改成下面的内容:
    char pbuf[5000];
    char pbuf1[10000];
    int x=0;
       int y=0;
      
       memset(pbuf1,0,sizeof(pbuf1));
       memset(pbuf,0,sizeof(pbuf));
       while (x=pHttpFile->Read((void *)pbuf,5000))
       {
        y=x+y;
       
        strcat(pbuf1,pbuf);
        memset(pbuf,0,sizeof(pbuf));
        }
    但仍然有“Read是以/0结束的,但我读的图片里有很多/0,所以只能读一小部分,循环就结束了,后面的大部分数据没有读出“的问题.你能给点完整读取图片的思路吗?谢谢了。
    2009年3月11日 2:28
  • 不要用strcat这样的字符串处理函数来处理二进制数据。

    建议你找本C++编程的书先看看,或者用代码搜索引擎找一些示例看看。

    MSMVP VC++
    2009年3月11日 2:43
    版主
  •  谢谢蒋老大的指导,问题已经解决。是二进制的处理有问题。
    2009年3月12日 0:53