如何将URLDownloadToFile获取的网页保存成图片!

flybox0384 2006-12-10 09:55:22
URLDownloadToFile获取的网页如何才能保存成图片,或者其他方法!(MFC)
...全文
896 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2006-12-11
  • 打赏
  • 举报
回复
You need to wait until DocumentComplete
http://www.codeproject.com/shell/AutomateShellWindow.asp
flybox0384 2006-12-11
  • 打赏
  • 举报
回复
先谢谢两位,但是还有问题!
pWebBrowser->put_Visible(VARIANT_TRUE);

pWebBrowser->Navigate(bstrURL,&vtFlags, &vtEmpty, &vtEmpty, &vtEmpty);
::VariantClear(&vtFlags);
::VariantClear(&vtEmpty);
SysFreeString(bstrURL); // 用完释放
SaveBitmapToFileA(GetIEAsBitmap(pWebBrowser,800,600),GetFilePath());



HBITMAP CMainFrame::GetIEAsBitmap(IWebBrowser2* piWB, INT nWidth, INT nHeight)
{
HBITMAP hbmRet = NULL;
RECT rc;
if (piWB && SetRect(&rc, 0, 0, nWidth, nHeight) && !IsRectEmpty(&rc))
{
if (HDC hDC = ::GetDC(NULL))
{
if (HDC hdcMem = CreateCompatibleDC(hDC))
{
if (HBITMAP hbm = CreateCompatibleBitmap(hDC, nWidth, nHeight))
{
BOOL bValid = FALSE;
if (INT nSaved = SaveDC(hdcMem))
{
if (SelectObject(hdcMem, hbm))
{
bValid = (SUCCEEDED(OleDraw(
piWB, DVASPECT_CONTENT, hdcMem, &rc)));
}
RestoreDC(hdcMem, nSaved);
}


if (!bValid)
DeleteObject(hbm);
else
hbmRet = hbm;
}
DeleteDC(hdcMem);
}
::ReleaseDC(NULL, hDC);
}
}
return hbmRet;
}

int CMainFrame::SaveBitmapToFileA(HBITMAP hBitmap,CString FileName)
{
HDC hDC;
WORD wBitCount;
DWORD dwPaletteSize = 0,dwBmBitsSize,dwDIBSize, dwWritten;

BITMAPFILEHEADER bmfHdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;

HANDLE fh,hDib, hPal,hOldPal=NULL;
wBitCount = 24;

if(wBitCount <= 8)
{
dwPaletteSize =(1 << wBitCount) *sizeof(RGBQUAD);
}
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth= 1024;
bi.biHeight = 768;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression= BI_RGB;
bi.biSizeImage= 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed= 0;
bi.biClrImportant= 0;

dwBmBitsSize = ((1024 * wBitCount+31)/24)* 3 * 768 ;

hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;

hPal = GetStockObject(DEFAULT_PALETTE);

if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}

GetDIBits(hDC, hBitmap, 0, 768,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,
(BITMAPINFO *)lpbi, DIB_RGB_COLORS);

if (hOldPal)
{
SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}

LPSTR lpFileName = (LPSTR)FileName.GetBuffer(FileName.GetLength());
fh = CreateFile(lpFileName,
GENERIC_WRITE,
0,//not be shared
NULL, //cannot be inherited
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);

if (fh == INVALID_HANDLE_VALUE)
return FALSE;

bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER)+ dwPaletteSize;

//write file header
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);

//write bmp data
WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);

GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);

return TRUE;
}

我建立一个IWebBrowser2 并指向了一个网址,也打开了,但是按照上面提供的方法得到BMP并保存到图片文件后,打开后是黑屏
请教到底是哪里错了
Kudeet 2006-12-11
  • 打赏
  • 举报
回复
Maybe you can try to use ie instance window, please refer to
http://support.microsoft.com/kb/176792
Kudeet 2006-12-11
  • 打赏
  • 举报
回复
http://groups.google.com/group/microsoft.public.win32.programmer.gdi/browse_frm/thread/6da1f405db299396/efde7b30b15a5188?lnk=st&q=capture+IE+window&rnum=20&hl=zh-CN#efde7b30b15a5188
flybox0384 2006-12-11
  • 打赏
  • 举报
回复
是将获得的整个网页为保存为图片。
蒋晟 2006-12-11
  • 打赏
  • 举报
回复
http://www.codeproject.com/internet/htmlimagecapture.asp
mm12333 2006-12-10
  • 打赏
  • 举报
回复
是要保存网页为图片呢
还是要保存图片为图片?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧