小议IE10下的DrawToBitmap方法
在完成博文“PS网页设计教程XXIV——从头设计一个漂亮的网站”后。
出于习惯,打开之前“利用Webbrowser类实现超长网页的截屏的实现(解决报错不能截取的难题)”中的代码的程序,截取博文作为资料保存。
不料,虽然程序很完美的执行了,但是截的图确有问题
参数显示,该截图有46688高,但是在截图中却出现了三次博文的抬头。也就是说,每大约在20000的地方,又重头开始截图了。这个是之前没有出现的情况。
出了问题了?立马打开代码,看看有没有什么问题?
_Web.Document.Window.Parent.ScrollTo(0, _CapTop)
If _Web.Document.Body.Parent.ScrollTop = _CapTop Then
_Bmp = New Bitmap(_Web.Width, _Web.Height)
_Web.DrawToBitmap(_Bmp, R)
Else
_Web.Height = _Web.Height - (_CapTop - _Web.Document.Body.Parent.ScrollTop)
_Web.Document.Window.Parent.ScrollTo(0, _CapTop)
_Bmp = New Bitmap(_Web.Width, _Web.Height)
R.Height = _Web.Height
_Web.DrawToBitmap(_Bmp, R)
End If
关于截图的核心代码如上所示。由于在之前的博文提到,WebBrowser类的DrawToBitmap方法对于高度很高的图片支持度不太好。因此,我采用了分段截图的方法。以本文为例,网页的高度46688,分三段截图。
第一次,将网页滚动到_Web.Document.Window.Parent.ScrollTo(0, 0)。截取高20000的图
第二次,将网页滚动到_Web.Document.Window.Parent.ScrollTo(0, 20000)。截取高20000的图
第三次,将网页滚动到_Web.Document.Window.Parent.ScrollTo(0, 40000)。截取剩下的高6688的图
WebBrowser类实际上是封装了系统中的IE,而DrawToBitmap方法是将浏览器窗口中的图截到Bitmap对象
按理说,上面的代码没有啥问题。之前,截取其他的图都没啥问题。
抱着试一试的心情,打开以前的PS网页教程,再次截取一下,悲剧又出现了,截图中再次多次出现抬头,截图失败。
分析一下失败的原因。
首先,代码没有报错,说明,没有语法上的错误。
在单步调试中,发现,_Web.DrawToBitmap(_Bmp, R)被调用了三次。只是原本截图正常的代码,现在不工作了,每次截取的都是同一部分。
难道是_Web.Document.Window.Parent.ScrollTo(0, _CapTop)方法失效,在调用该方法后,立马查看_Web.Document.Body.Parent.ScrollTop的值,发现的确是改变了,说明_Web.Document.Window.Parent.ScrollTo(0, _CapTop)方法没有失效,运作正常。
那问题出在哪儿呢?原本好好的代码,现在运行咋不正常呢?
原本好好的代码,现在运行不正常。说明环境变了。环境?嗯,想起来了,之前用的是IE9,现在系统刚刚升级到IE10。会不会是IE内核的变化,导致代码运作失常呢?
果断卸掉IE10,回到IE9。再打开代码运行重新截图。现在正常了,看来是IE10的问题
来看看,可能出现的问题的地方
之前说过WebBrowser类实际上是IE的封装。你系统中是IE9,它调用IE9的方法;你系统中是IE10,它调用IE10的方法。
而两者唯一的差别可能就是这句话了
_Web.DrawToBitmap(_Bmp, R)
我的推测是
IE9及之前的版本,_Web.DrawToBitmap(_Bmp, R)方法只截取当前浏览器窗口中的图,对于超出浏览器的部分则无法截取,该方法的参数R以浏览器的左上角为基准的。
IE10的版本,可能由于内核的升级,_Web.DrawToBitmap(_Bmp, R)方法可以截取超出浏览器窗口部分,该方法的参数R以网页的左上角为基准的。故执行了三次_Web.DrawToBitmap(_Bmp, R)的方法,每次截取的都是同一部分的图(以网页的左上角为基准)
如果要使截图正常,要么修改R的参数;或者IE10提供了DrawToBitmap的重载方法,提供了可以设置截图位置的参数。由于没有找到相关的资料,故只能是推测。
有网友能提供相关的IE10的资料么?
还有一个问题,再从IE10到IE9时,发现IE9不太正常了,像QQ离线下载的功能就不能使用了。下载了一个IE9的安装包,说是比我系统中的IE9版本低,没法安装。有没有办法能修复IE9,使IE9正常运作?
小议IE10下的DrawToBitmap方法的更多相关文章
- Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题
1.问题分析: 没有__dopost 的原因是因为没有 ie10下 页面里 没有这个 方法,和 2个 input 标签,ie10 没有解析出来,所以就不能翻页了. 2.解决办法:(缺什么补什么,将这个 ...
- FCKEditor在IE10下的不兼容问题解决方法
环境介绍:FCKEditor 版本 2.x.x 问题:IE10 下FCKEditor不兼容,显示不出来 关键词:不同于其他方法之处是第一个关键点,其他网友的正则表达式不对 解放方法:(可以直接< ...
- 小议 js 下字符串比较大小
原文:小议 js 下字符串比较大小 之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2 ...
- .NET在IE10下的回传BUG修复
以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及PostBack的操作仅在IE10下都无效,其他版本浏览器都没有问题,本机调试也没有问题. 这也就是说在程序相同的情 ...
- [原创]如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase”
如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase” 错误 如果你的IE是IE10,且不是运行在IE的兼容模式你也许会 ...
- svn服务器地址变换以后,mac下的处理方法
svn服务器地址变换之后,mac下的处理方法 svn服务器地址变换之后,mac下的处理方法 1.进入终端,进入项目所在的文件夹下: cd 项目位置/ 2.查看svn信息 svn info 3.输出结果 ...
- 重写类的Equals以及重写Linq下的Distinct方法
当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...
- opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...
- DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.
getpass 模块 getpass 模块提供了平台无关的在命令行下输入密码的方法. getpass(prompt) 会显示提示字符串, 关闭键盘的屏幕反馈, 然后读取密码. 如果提示参数省略, 那么 ...
随机推荐
- STM32F4XX devices vector table for EWARM toolchain.
;/******************** (C) COPYRIGHT 2015 STMicroelectronics ******************** ;* File Name : sta ...
- EF Core数据迁移操作
摘要 在开发中,使用EF code first方式开发,那么如果涉及到数据表的变更,该如何做呢?当然如果是新项目,删除数据库,然后重新生成就行了,那么如果是线上的项目,数据库中已经有数据了,那么删除数 ...
- [Winfrom]Cefsharp配置与初始化
摘要 在做客户端程序的时候,本来打算使用wpf的,但在内嵌cefsharp的时候,发现输入法有问题,所以使用了winform作为cefsharp的容器. 系列文章 CefSharp 在同一窗口打开链接 ...
- Git 的 WindowsXP安装
文章1: http://blog.sina.com.cn/s/blog_5063e4c80100sqzq.html 一.安装必要客户端 1. TortoiseGit http://tortoisegi ...
- Linux安装ImageMagick与JMagick完成过程及配置
原文地址:http://www.iitshare.com/linux-install-imagemagick-jmagick.html 一.安装背景 最近在服务器上部署了HapiCMS的产品,因为其对 ...
- Win7 ArcGIS 10.5 安装错误 A service pack is required on this operatiing system
前段时间有朋友反馈在Win7专业版下安装ArcGIS 10.5, 无法安装,弹出错误: A service pack is required on this operatiing system,如图: ...
- android ActionBarImpl can only be used with a compatible window decor layout
在Activity中添加 requestWindowFeature(Window.FEATURE_ACTION_BAR); requestWindowFeature(Window.FEATURE_AC ...
- C++ inline内联函数
inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s ...
- Monitoring an IBM JVM with VisualVM
Monitoring an IBM JVM with VisualVM 分类: Java 2013-06-09 16:15 250人阅读 评论(0) 收藏 举报 JDK6 update 7 and o ...
- 无耻之徒(美版)第一季/全集Shameless US迅雷下载
第一季 Shameless Season 1 (2011)看点:本以为美版<无耻之徒>(Shameless)是小众剧(诸多儿童不宜),但是试播集98.2万的收视人次竟然创下了Showtim ...