用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再领分
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再领分
已经分析出来了,图片的src已经取出,已经把图片复制至剪切板,问题是,怎么从剪切板取出。因为不是bmp图片,总是提示格式错误
InternetOpen
InternetOpenUrl
InternetReadFile
InternetCloseHandle
#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);
}
this->m_pPic->Render(...)
看看这些剪贴板格式是否支持