社区
网络编程
帖子详情
如何将URLDownloadToFile获取的网页保存成图片!
flybox0384
2006-12-10 09:55:22
URLDownloadToFile获取的网页如何才能保存成图片,或者其他方法!(MFC)
...全文
963
7
打赏
收藏
如何将URLDownloadToFile获取的网页保存成图片!
URLDownloadToFile获取的网页如何才能保存成图片,或者其他方法!(MFC)
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
是要保存网页为图片呢
还是要保存图片为图片?
前端事件系统(二)
本章将把重点放在于对于事件的委托机制,以及jquery的事件绑定方法做一些解析。本章并没有什么比较难懂的地方,也还没有深入到jQuery的事件系统内部。 事件委托 上一章讲了前端事件系统以及简单地对各个浏览器进行兼容的方法。对于要求不高的页面来说,之前的简单事件注册,就可以很好的胜任各种各样的工作了。但是,试想一种情况。倘若一个页面有着极大量的事件绑定的需求,那么我们之前的事件系统,就...
前端开发学习 (二) 事件修饰符、系统命令
好无聊啊data: {//在data中定义样式});
vue给标签动态添加元素_动态添加dom元素,并绑定vue事件
背景:后管系统配置一个产品后,前端(vue.js框架)取到这些产品信息并展示出来,产品经理要求在文本内容中添加链接。例如:本保险不承保前往处于战争状态或已被宣布为紧急状态的国家或地区,最新信息以登陆http://baoxian.pingan.com/dangerous_zone/war.shtml的查询结果为准。如果上面内容中是简单的链接跳转,用v-html把上面段内容展示出来即可。问题关键是,不...
泛微OA_E9_流程、公文模块二开培训_1_1981
采用三层结构: - `action` 调用 `service`,再调用 `send` 返回数据。4. **公文操作逻辑** - 流程加载时通过 `Request.server` 加载公文数据和方法。6. **公文页面入口与状态** - 入口文件为 `index_odc.jsp`,根据公文状态加载不同页面: - `ADD`:新建文档。- `DSP`:查看文档(只读状态)。#泛微、#OA、#E10、#E9、#eteams、#E8、#E7、#Emobile、#ecology、#建模、#流程。
【前端面试】事件监听机制&React 的事件系统实现
方法是 Web API 的一部分,它允许开发者创建和触发自定义事件或内置事件。这个方法属于所有实现了接口的 DOM 节点,包括元素、文档和窗口。使用方法可以模拟用户行为或其他交互,从而触发事件处理程序。以下是如何使用创建事件对象:首先,你需要创建一个事件对象。对于内置事件,你可以使用EventMouseEvent等构造函数来创建相应的事件对象。触发事件:然后,使用方法将事件对象分派到目标元素上,这将触发绑定在该元素上的事件监听器。
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章