C# webBrowser 截取验证码截图的两种方式

来源:互联网 发布:免费票据打印软件 编辑:程序博客网 时间:2024/05/16 09:37

 

本来是想把网页加载出来的验证码的图片控件<img>中的url直接放到PictureBox,但发现url是一个没有图片格式后缀的地址(或是个action),所以图片没能显示在PictureBox中。

从网上搜索相关解决办法,测试通过了其中两种。

 

环境:vs2008

 

第一种:

 

属性声明区域引入:

        [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
        public static extern int BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);

截图方法中:

           

int x = 10;int y = -20;        //用于保存图片的位图对象                   Bitmap bmSave = new Bitmap(220, 60);        //创建该位图的Graphics对象            Graphics gSave = Graphics.FromImage(bmSave);                     Graphics gSrc = this.webBrowser1.CreateGraphics();        HandleRef hDcSave = new HandleRef(null, gSave.GetHdc());               HandleRef hDcSrc = new HandleRef(null, gSrc.GetHdc());        BitBlt(hDcSave, x, y, 220, 60, hDcSrc, 0, 0, 0xcc0020);        gSrc.ReleaseHdc();        gSave.ReleaseHdc();        bmSave.Save("d://test.png");        gSrc.Dispose();        gSave.Dispose();        bmSave.Dispose();


这样PictureBox的图像地址设置为"d://test.png",就可以显示图片了。

需要说明的是起始坐标X,Y可以设置负数,这也许能让你截取图片时,找到最佳切入位置。

 

 

第二种:

 

比较简单,DrawToBitmap方法,网上也有很多举例的,但发现vs2008的webBrowser没有这个方法。通过查阅msdn介绍,发现这个方法在r它“老子”那里。

  

ectangle rect = new Rectangle(0, 0, 220, 60);        Bitmap bmSave1 = new Bitmap(220, 60);        this.webBrowser1.Parent.DrawToBitmap(bmSave1, rect);        bmSave1.Save("d://test1.png");


注意第一句的Rectangle(0, 0, 220, 60)前两个参数是0(不可以是负数,否则报错)。

问题来了,图片在网页的什么地方??幸好又碰到一位高人,把这个图片的网页元素设置到网页的左上角,如下:

 

        HtmlElement ele_pic = this.webBrowser1.Document.GetElementsByTagName("img")[0];        ele_pic.Style = "position: absolute; z-index: 9999; top: 0px; left: 0px";


这样截取图片的起始起始位置就是0,0,从而保证完好无损的截图原图片。

以上内容中的220, 60 不用多说了,是图片的大小,这个你可以从网页中显示的图片,右键-属性得知。

 

 

 

 

 

 

 

0 0
原创粉丝点击