用webbrowser打开一个网页后,想取得其中的jpeg图片,我用的是IHTMLControlRange::execCommand执行Copy,将图片拷贝至剪切板中,但是从剪切板中取出时出现了麻烦: 
if (Clipboard()->HasFormat(CF_METAFILEPICT))//此时无论是CF_METAFILEPICT,CF_PICTURE还是BITMAP,返回都是false 若直接LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP), 0),则发生异常,说 
“unsupported clipboard format”. 求解~,也可以通过其它方式但不想通过取得图片链接然后再下载的方式也可以通过获得图片的缓存地址的方法,但对GetUrlCacheEntryInfo不熟,而且听说此函数对网址的识别有问题。希望老大解释用法~分不多了,可以去http://topic.csdn.net/u/20091101/23/b4e581b2-575a-4d4e-89c7-30c53f47b1c1.html再领分

解决方案 »

  1.   

    可以用ie的dom模型接口或者自己用正则表达式分析html页面.
      

  2.   


    已经分析出来了,图片的src已经取出,已经把图片复制至剪切板,问题是,怎么从剪切板取出。因为不是bmp图片,总是提示格式错误
      

  3.   

    LoadFromClipboardFormat 不是标准api, 是不是用了封装的类, 你应该先取得clipboard中的类型,然后在想办法从里面取数据,另外, 你用其他程序试过吗? 可以 paste 图片文件吗?
      

  4.   

    我觉得使用链接下载比较好,如下的四个函数就可以了
    InternetOpen
    InternetOpenUrl
    InternetReadFile
    InternetCloseHandle
      

  5.   

    参考下面的代码:#include<wininet.h> 
    #pragma comment(lib,"wininet.lib")   
    void SetImage(LPCTSTR imgUrl)
    {
    DWORD length(1024*10);
    DWORD readLength(0);
    BYTE* pBuffer(NULL);
    BYTE* p(NULL);
    HINTERNET hInternet; hInternet=InternetOpen(_T("someName"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
    if (hInternet==NULL)
    {
    return;
    } HINTERNET hUrl;
    hUrl=InternetOpenUrl(hInternet,imgUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
    if (hUrl==NULL)
    {
    InternetCloseHandle(hInternet);
    return;
    } try
    {
    //下载图片
    pBuffer=new BYTE[length];
    memset(pBuffer,0,length);
    p=pBuffer;
    BOOL read;
    while(true)
    {
    read=InternetReadFile(hUrl,p,1024,&readLength);
    if(!read||readLength==0)
    break;
    if ((p-pBuffer+readLength)>=length)
    {
    DWORD len=2*length;
    BYTE* tmp=new BYTE[len];
    memset(tmp,0,len);
    memcpy(tmp, pBuffer, length);
    int offset=p-pBuffer;
    delete[] pBuffer; pBuffer=tmp;
    p=pBuffer+offset;
    length=len;
    }
    p+=readLength;
    }
    int btslen=p-pBuffer; //生成图片
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, btslen); 
    LPVOID pvData = NULL;  if (hGlobal != NULL) 
    {
    if ((pvData = GlobalLock(hGlobal)) != NULL) 
    {
    errno_t err;
    err = memcpy_s(pvData, btslen, pBuffer, btslen);
    if (!err)
    {
    GlobalUnlock(hGlobal); 

    IPicture *pPic; 
    IStream *pStm; 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);  HRESULT hr;
    hr=OleLoadPicture(pStm,btslen,TRUE,IID_IPicture,(LPVOID*)&pPic); 
    if(hr==S_OK)
    {
    this->m_pPic=pPic;//m_pPic缓存图片信息
    }
    }
    }
    }
    if (pBuffer!=NULL)
    {
    delete[] pBuffer;
    }
    }
    catch(...){}
    InternetCloseHandle(hUrl);
    InternetCloseHandle(hInternet);
    }
      

  6.   

    显示出下载的图片,或保存为文件都可以通过this->m_pPic来实现,比如画出图片:
    this->m_pPic->Render(...)
      

  7.   

    你找个解释jpg的lib....有很多现成的....直接对数据操作
      

  8.   

    http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx
    看看这些剪贴板格式是否支持