在完成博文“PS网页设计教程XXIV——从头设计一个漂亮的网站”后。

出于习惯,打开之前“利用Webbrowser类实现超长网页的截屏的实现(解决报错不能截取的难题)”中的代码的程序,截取博文作为资料保存。

不料,虽然程序很完美的执行了,但是截的图确有问题

参数显示,该截图有46688高,但是在截图中却出现了三次博文的抬头。也就是说,每大约在20000的地方,又重头开始截图了。这个是之前没有出现的情况。

出了问题了?立马打开代码,看看有没有什么问题?

            Dim R As Rectangle = New Rectangle(0, 0, _Web.Width, _Web.Height)

_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方法的更多相关文章

  1. Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题

    1.问题分析: 没有__dopost 的原因是因为没有 ie10下 页面里 没有这个 方法,和 2个 input 标签,ie10 没有解析出来,所以就不能翻页了. 2.解决办法:(缺什么补什么,将这个 ...

  2. FCKEditor在IE10下的不兼容问题解决方法

    环境介绍:FCKEditor 版本 2.x.x 问题:IE10 下FCKEditor不兼容,显示不出来 关键词:不同于其他方法之处是第一个关键点,其他网友的正则表达式不对 解放方法:(可以直接< ...

  3. 小议 js 下字符串比较大小

    原文:小议 js 下字符串比较大小 之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2 ...

  4. .NET在IE10下的回传BUG修复

    以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及PostBack的操作仅在IE10下都无效,其他版本浏览器都没有问题,本机调试也没有问题. 这也就是说在程序相同的情 ...

  5. [原创]如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase”

    如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase” 错误 如果你的IE是IE10,且不是运行在IE的兼容模式你也许会 ...

  6. svn服务器地址变换以后,mac下的处理方法

    svn服务器地址变换之后,mac下的处理方法 svn服务器地址变换之后,mac下的处理方法 1.进入终端,进入项目所在的文件夹下: cd 项目位置/ 2.查看svn信息 svn info 3.输出结果 ...

  7. 重写类的Equals以及重写Linq下的Distinct方法

    当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...

  8. opencv直线检测在c#、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  9. DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.

    getpass 模块 getpass 模块提供了平台无关的在命令行下输入密码的方法. getpass(prompt) 会显示提示字符串, 关闭键盘的屏幕反馈, 然后读取密码. 如果提示参数省略, 那么 ...

随机推荐

  1. LPC-LINK 2

    LPC-Link 2 is an extensible, stand-alone debug adapter that can be configured to support various dev ...

  2. DELPHI实现关机,兼容全部WINDOWS系统 转

    {=================================================================================================== ...

  3. ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定

    本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...

  4. 使用SQL Database Migration Wizard把SQL Server 2008迁移到Windows Azure SQL Database

    本篇体验使用SQL Database Migration Wizard(SQLAzureMW)将SQL Server 2008数据库迁移到 Azure SQL Database.当然,SQLAzure ...

  5. 有关Delphi RTTI的一些文章

    Delphi RTTI 资料 Delphi 的RTTI机制浅探 Delphi XE的RTTI增强,动态Hook某些内部事件

  6. firedac连接WINDOWS的ORACLE

    firedac连接WINDOWS的ORACLE 首先安装OCI FOR WINDOWS.OCI分WIN32和WIN64,且OCI的版本要和ORACLE的版本相一致才行. FIREDAC指定OCI驱动程 ...

  7. View Programming Guide for iOS_读书笔记[正在更新……]

    原文:View Programming Guide for iOS 1 Introduction 先熟悉一下基本概念. Window Windows do not have any visible c ...

  8. WordPress主题开发:优化标题

    页面使用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. ios成长之每日一遍(day 3)

    今天要介绍一下更多的控键使用, 当然也会对上一篇说的控件做一个巩固, 所以这一篇涉及到的控键会包括 UIImage.UITextField.UIButton.UILabel.UISwitch.以及 U ...

  10. 《Google Glass开发指南》

    <Google Glass开发指南> 基本信息 作者: BestApp工作室 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115349477 上架时间:2014-3-19 ...