Mega Code Archive

 
Categories / Delphi / Graphic
 

Save a Webbrowser page to a bitmap

Title: Save a Webbrowser Page to a Bitmap Question: I need to make screenshots of web pages. Can I do that elegantly with TWebBrowser? Answer: Have your TWebBrowser load the page, then have a view object paint the page onto a TCanvas (of a TBitmap) which you then subsequently resize to your desired thumbnail dimension and save in JPEG format. uses MSHTML_TLB, JPEG, ActiveX, ComObj; procedure generateJPEGfromBrowser(browser: iWebBrowser2; jpegFQFilename: string; srcHeight: Integer; srcWidth: Integer; tarHeight: Integer; tarWidth: Integer); var sourceDrawRect: TRect; targetDrawRect: TRect; sourceBitmap: TBitmap; targetBitmap: TBitmap; jpeg: TJPEGImage; viewObject: IViewObject; begin sourceBitmap := TBitmap.Create; targetBitmap := TBitmap.Create; jpeg := TJPEGImage.Create; try try sourceDrawRect := Rect(0, 0, srcWidth, srcHeight); sourceBitmap.Width := srcWidth; sourceBitmap.Height := srcHeight; viewObject := browser as IViewObject; if viewObject = nil then Exit; OleCheck(viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Form1.Handle, sourceBitmap.Canvas.Handle, @sourceDrawRect, nil, nil, 0)); // Resize the src bitmap to the target bitmap targetDrawRect := Rect(0, 0, tarWidth, tarHeight); targetBitmap.Height := tarHeight; targetBitmap.Width := tarWidth; targetBitmap.Canvas.StretchDraw(targetDrawRect, sourceBitmap); // Create a JPEG from the Bitmap and save it jpeg.Assign(targetBitmap); jpeg.SaveToFile(jpegFQFilename); finally jpeg.Free; sourceBitmap.Free; targetBitmap.Free; end; except // Error Code end; end; procedure TForm1.btnButton1Click(Sender: TObject); var IDoc1: IHTMLDocument2; Web: ShDocVW_TLB.IWebBrowser2; tmpX, tmpY: Integer; begin with WebBrowser1 do begin Document.QueryInterface(IHTMLDocument2, iDoc1); Web := ControlInterface; tmpX := Height; tmpY := Width; TControl(WebBrowser1).Visible := Boolean(0); // change the height and width temporary Height := OleObject.Document.ParentWindow.Screen.Height; Width := OleObject.Document.ParentWindow.Screen.Width; generateJPEGfromBrowser(Web,'c:\test.jpg',Height, Width, Height, Width); Height := tmpX; Width := tmpY; TControl(WebBrowser1).Visible := Boolean(1); end; end;