把网页抓图保存成JPG文件(针对单框架网页)。
procedure TForm1.Button1Click(Sender: TObject); var Doc: IHTMLDocument2; ViewObject: IViewObject; sourceDrawRect: TRect; a, getjpg: TBitMap; i, m: integer; pdest, psour: hbitmap; jpg: tjpegimage; begin Doc := WebBrowser.Document as IHTMLDocument2; if Webbrowser.Document <> nil then try webbrowser.Document.QueryInterface(IViewObject, ViewObject); if ViewObject <> nil then try Doc.Get_ParentWindow.Scroll(0, 0); //跳到网页头 getjpg := TBitMap.Create(); getjpg.PixelFormat := pf24bit; getjpg.Height := doc.Body.getAttribute('scrollHeight', 0); getjpg.Width := doc.Body.getAttribute('scrollwidth', 0); pdest := getjpg.Canvas.Handle; m := Trunc(doc.Body.getAttribute('ScrollHeight', 0) / (doc.Body.getAttribute('offsetHeight', 0) - 20)); i := Trunc(doc.Body.getAttribute('Scrollwidth', 0) / (doc.Body.getAttribute('offsetwidth', 0) - 20)); for i := 0 to i do begin for m := 0 to m + 1 do begin a := TBitMap.Create(); a.Height := doc.Body.getAttribute('offsetHeight', 0); a.Width := doc.Body.getAttribute('offsetwidth', 0); psour := a.Canvas.handle; sourceDrawRect := Rect(0, 0, a.Width, a.Height); ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle, a.Canvas.Handle, @sourceDrawRect, nil, nil, 0); bitblt(pdest, doc.Body.getAttribute('scrollLeft', 0), doc.Body.getAttribute('Scrolltop', 0), a.Width, a.Height, psour, 2, 2, srccopy); Doc.Get_ParentWindow.Scroll(doc.Body.getAttribute('scrollLeft', 0), doc.Body.getAttribute('offsetHeight', 0) + doc.Body.getAttribute('Scrolltop', 0) - GetSystemMetrics(SM_CXVSCROLL) - 24); a.Free; end; Doc.Get_ParentWindow.Scroll(doc.Body.getAttribute('offsetwidth', 0) + doc.Body.getAttribute('scrollLeft', 0) - GetSystemMetrics(SM_CXVSCROLL) - 24, 0); end; jpg := tjpegimage.Create; jpg.Assign(getjpg); getjpg.Free; jpg.SaveToFile('c:\test.jpg'); jpg.Free; finally ViewObject._Release; end; except end; end; |