如题,我要象读文件一样,读取这个图片的内容,以便进行分析。

解决方案 »

  1.   

    二楼,你说的是下载以后读吧,这样速度可能会慢些三楼,关键是我不知道如何得到这个IMAGE的矩形区域啊,如果得到的不准确,会不会影响我读取的正确性啊如果你知道,能把关键的API或者方法告诉我吗
      

  2.   

    对了,此文件下载后是个 BMP文件
      

  3.   

    用WININET,从源码里分析出地址,然后下下来
      

  4.   

    网页图片->剪贴板->任何地方
    编译环境,VC6+XP SP2 SDK
    我就是这么做的:
    /********************************************************************
    Function : CopyImageToClipboard
    Params:
    [IN] pDoc: the html document pointer
    [IN] lpImgKeySrc: the img src KEY string for search the image!
    Return:
    true success false:copy failed
    Purpose:
    copy the img to clip board!!
    Author: Peter Pan,2007/08/21
    *********************************************************************/
    BOOL CHtmlHelper::CopyImageToClipboard(IHTMLDocument2 *pDoc, LPCSTR strImgKey)
    { USES_CONVERSION; HRESULT hr ; IHTMLElement* pBody = NULL; //the body element!
    IHTMLTextContainer *pTextCont=NULL; //text contaniner interface! IHTMLImgElement *pImg=NULL; IDispatch* pdispImgElement = NULL;
    IDispatch* pdispCtrlRange = NULL; IHTMLElementCollection* pImgCol = NULL; IHTMLControlElement* pCtrlElement = NULL;
    IHTMLControlRange* pCtrlRange = NULL; BSTR bstrCommand = SysAllocString(L"Copy");
    VARIANT_BOOL vbReturn;
    VARIANT vEmpty;
    VariantInit(&vEmpty);

    long lCount=0;
    pDoc->get_images(&pImgCol);
    if (NULL == pImgCol)
    {
    return FALSE;
    }
    pImgCol->get_length(&lCount);
    if (lCount == 0) //no link found!
    {
    pImgCol->Release();
    return FALSE;
    }
    //check every img src!
    for (int i=0;i<lCount;i++)
    {
    BSTR bstrSrc=NULL;
    VARIANT index;
    index.vt=VT_I4;
    index.lVal=i;
    pImgCol->item(index,index,(IDispatch **)&pdispImgElement);

    pdispImgElement->QueryInterface( IID_IHTMLImgElement,(void **)&pImg); if (NULL != pImg)
    {
    pImg->get_src(&bstrSrc);
    if (StrStrI(W2A(bstrSrc),strImgKey) != NULL) //find the img we want!!
    {
    break;
    }
    pImg->Release();
    }
    } pDoc->get_body(&pBody);
    pBody->QueryInterface(IID_IHTMLTextContainer,(void**)&pTextCont);
    if (NULL == pTextCont)
    {
    return FALSE;
    }
    pTextCont->createControlRange(&pdispCtrlRange);
    if (NULL == pdispCtrlRange)
    {
    return FALSE;
    }
    pdispCtrlRange->QueryInterface(IID_IHTMLControlRange, (void**) &pCtrlRange);
    if (NULL == pCtrlRange)
    {
    return FALSE;
    } pdispImgElement->QueryInterface(IID_IHTMLControlElement, (void**) &pCtrlElement);
    if (NULL == pCtrlElement)
    {
    return FALSE;
    } hr=pCtrlRange->add(pCtrlElement);

    if (SUCCEEDED(hr))
    {
    hr = pCtrlRange->execCommand(bstrCommand, VARIANT_FALSE, vEmpty, &vbReturn);
    }
    pCtrlElement->Release();

    SysFreeString(bstrCommand);

    if (pCtrlRange)
    pCtrlRange->Release();

    if (pdispCtrlRange)
    pdispCtrlRange->Release();

    if (pBody)
    {
    pBody->Release();
    }

    if (pdispImgElement)
    {
    pdispImgElement->Release();
    }

    if (pImgCol)
    {
    pImgCol->Release();
    } return TRUE;
    }///下面是把剪贴板里的图片变成HBITMAP的代码
    OpenClipboard();   //open clip board
    HANDLE hBitmap = GetClipboardData(CF_BITMAP);   //get the bmp handle!

    if(NULL == hBitmap)
    {
    //show the info!
    GetDlgItem(IDC_STATICINFO)->ShowWindow(SW_SHOW);
    }
    else
    {
    //must copy the image!!
    m_hbitmap=(HBITMAP)CopyImage(hBitmap,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
    m_ctrlImage.SetBitmap((HBITMAP)m_hbitmap);
    }
    CloseClipboard();   //close clipboard呵呵,这个可是我写的一个软件内的源码哦,免费给你参考吧
      

  5.   

    以前也有人问这个,分太少了没答。lz真是大方啊。
    先拿到IHtmlElement,再QueryInterface到IHTMLElementRenderer接口,再调IHTMLElementRender::DrawToDC这个方法就可以了。DC是你自己的,要怎么控制都行。图片的大小从IHTMLImgElement里可以拿到。
      

  6.   

    superarhow(苏泊尔耗), 你写的太简单了,只能是给了个思路,所以只给了你十分,见谅