zoukankan      html  css  js  c++  java
  • 有人做过FLASH验证码识别吗?

    图形验证码识别的资料满天飞,就是没见到有flash的.
    有人做过吗?给个思路.
    和图形识别没有根本区别,得到元素的IHTMLElementRender接口,调用DrawToDC画到你的Memory   DC上去。

    private void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
                WebBrowser browser = (sender as WebBrowser);
    
                if (browser != null) {
                    mshtml.IHTMLDocument2 document = (browser.Document.DomDocument as mshtml.IHTMLDocument2);
                    if (document != null) {
                        mshtml.IHTMLElement element = (document.body as mshtml.IHTMLElement);
                        if (element != null) {
                            IHTMLElementRender render = (element as IHTMLElementRender);
                            if (render != null) {
                                using (Graphics graphics = this.CreateGraphics()) {
                                    IntPtr hdcDestination = graphics.GetHdc();
                                    render.DrawToDC(hdcDestination);
                                    IntPtr hdcMemory = GDI32.CreateCompatibleDC(hdcDestination);
                                    IntPtr bitmap = GDI32.CreateCompatibleBitmap(
                                      hdcDestination,
                                      browser.ClientRectangle.Width,
                                      browser.ClientRectangle.Height
                                      );
    
                                    if (bitmap != IntPtr.Zero) {
                                        IntPtr hOld = (IntPtr)GDI32.SelectObject(hdcMemory, bitmap);
                                        GDI32.BitBlt(
                                          hdcMemory,
                                          0, 0,
                                          browser.ClientRectangle.Width, browser.ClientRectangle.Height,
                                          hdcDestination,
                                          0, 0,
                                          TernaryRasterOperations.SRCCOPY
                                          );
                                        GDI32.SelectObject(hdcMemory, hOld);
                                        GDI32.DeleteDC(hdcMemory);
                                        graphics.ReleaseHdc(hdcDestination);
    
                                        SaveThumbnail(Image.FromHbitmap(bitmap));
                                    }
                                }
                            }
                        }
                    }
                }
            }
    private void SaveThumbnail(Image image) {
                if (image != null) {//创建一个位图图像
                    Bitmap thumbnail = new Bitmap(160, 120, PixelFormat.Format24bppRgb);
                    thumbnail.SetResolution(image.HorizontalResolution, image.VerticalResolution);
    
                    using (Graphics resize = Graphics.FromImage(thumbnail)) {
                        resize.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        resize.DrawImage(image,
                          new Rectangle(0, 0, 160, 120),
                          new Rectangle(0, 0, _webBrowser.ClientRectangle.Width, _webBrowser.ClientRectangle.Height),
                          GraphicsUnit.Pixel);
                    }
                    thumbnail.Save(_file.FullName, ImageFormat.Png);
                }
            }
  • 相关阅读:
    一、逻辑架构与存储引擎
    三、动态SQL
    九、装饰者模式
    二、Mapper映射文件
    八、适配器模式
    测试开发系列之Python开发mock接口(二)
    测试开发系列之Python开发mock接口(三)
    html基础
    seleniumWebdriver浏览器驱动信息汇总
    用30行代码开发一个上传、下载文件的接口
  • 原文地址:https://www.cnblogs.com/renzhe/p/3032009.html
Copyright © 2011-2022 走看看