Delphi - TWebBrowser komponensbe betöltött lap mentése JPEG állományba

forráskód letöltése
A TWebBrowser komponens hasznosságát talán senkinek sem kell bemutatnunk, hiszen ez kézenfekvő. Azon túl, hogy tetszőleges weboldalak betölthetők, lehetőségünk van elérni a komponens mögött rejlő objektummodellt. Az objektummodell meghatározott elemeinek segítségével tudjuk például elmenteni a böngészőkomponensbe betöltött HTML lap képét egy képállományba. Cikkünkben ennek részleteit mutatjuk be.
A példaprogram indulásakor betöltünk egy weblapot a TWebBrowser komponensbe. A MENTÉS gombbal pedig elérhetjük, hogy az adott weblap képét egy JPEG állományba mentsük el. A mentéshez a JPEG egységben található TJPEGImage osztályt használjuk fel. Lássuk, hogyan történik a művelet konkrétan.
A művelet úgy zajlik, hogy a TWebBrowser komponens Document objektumának meghívjuk egy metódusát, mely segítségünkre lesz a szükséges objektum létrehozásában. A mentés folyamán egy forrás TBitmap objektum tartalma kerül át a cél TBitmap objektum területére, majd az egész rajzot TJPEGImage objektum területére töltjük át.
A szükséges változók létrehozása az első lépés.
vo: IViewObject;
source_rect : TRect;
target_rect: TRect;
source_bmp: TBitmap;
target_bmp: TBitmap;
jpg: TJPEGImage;
Majd lefoglaljuk a memóriaterületeket.
source_bmp := TBitmap.Create ;
target_bmp := TBitmap.Create ;
jpg := TJPEGImage.Create ;
Inicializáljuk a forrásobjektumokat.
source_rect := Rect(0,0,WebBrowser1.Width,WebBrowser1.Height);
source_bmp.Width := WebBrowser1.Width;
source_bmp.Height := WebBrowser1.Height;
A kép méretének meghatározásában a böngészőkomponens aktuális mérete lesz az irányadó.
Generálunk egy objektumot, mely az IViewObject interfész tulajdonságait implementálja.
WebBrowser1.Document.QueryInterface(IViewObject,vo);
Az objektum Draw metódusával rajzoljuk ki a betöltött lap képét a forrásképre, a megadott méretben.
OleCheck(vo.Draw(DVASPECT_CONTENT, 1, nil, nil, self.Handle, source_bmp.Canvas.Handle, @source_rect, nil, nil, 0));
A következő lépés a célobjektumok inicializálása, méreteik megadása.
target_rect := Rect(0,0,WebBrowser1.Width,WebBrowser1.Height);
target_bmp.Height := WebBrowser1.Width;
target_bmp.Width := WebBrowser1.Height;
Majd a kívánt méretkonverziók elvégzésével a cél TBitmap területére másoljuk a forrásképet.
target_bmp.Canvas.StretchDraw(target_rect, source_bmp);
Ehhez a Canvas osztály StretchDraw metódusát használjuk fel. Az utolsó lépés, hogy a TBitmap objektum által tartalmazott képet a JPEG formátumba konvertáljuk, és elmentsük. Az első művelet elvégzésére a TJPEGImage osztály Assign metódusa szolgál, a másodikra a SaveToFile metódus.
jpg.Assign(target_bmp);
     jpg.SaveToFile(ExtractFilePath(Application.ExeName)+'sample.jpg');
A mentett állomány a projekt mappájában lesz megtalálható.