HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

JPG és BMP képek részeinek kivágása


Példaprogram letöltése

14487 bájt

Készítünk egy komponenst, amely segítségével egy megadott forrásmappa összes JPG és BMP képéből kivághatunk egy megadott téglalappal lefedhető területet. A kivágott képek egy megadott célmappába kerülnek, az eredeti képpel megegyező néven és formátumban.

A mellékelt példaprogram megnyitása előtt a SubImagePackage.pas-ban levő komponenst telepítenie kell a Delphi alá. A Delphi 6-os verziójától kezdődően a Package állományban tennünk kell egy módosítást. A Requires feliraton kattintsunk az egér jobb gombjával. A megjelenő menüben válasszuk az Add menüpontot. Megnyílik egy újabb ablak, ahol lehetőségünk van állományokat tallózni. Keressük meg a Delphi Lib alkönyvtárában található DesignIDE.dcp állományt, majd adjuk hozzá a Package állományhoz. A Package állományt csak ez után telepítsük.
A komponens SourceDir és DestinationDir property-jeiben állíthatjuk be a forrás- és a célmappákat.
A kivágás területét egy keret formájában adhatjuk meg az ILeft (X koordináta), ITop (Y koordináta), IWidth (szélesség) és IHeight (magasság) property-ken keresztül.
Az Execute metódus meghívására a komponens végignézi a forráskönyvtár tartalmát és feldolgozza az abban található összes BMP és JPG állományt.
Az Execute metódust szerkesztési időben is meghívhatjuk, ha a komponens felett az egér jobb oldali gombjának megnyomásával egy helyi menüt kérünk.
A komponenst a TComponent osztályból származtatjuk.
A komponens működésének lényege az Execute metódusban található.
procedure Execute;
A SourceDir property-ben megadott könyvtárban képeket kell keresnünk.
A FindFirst – FindNext utasításpáros használatával a könyvtár összes bejegyzését megvizsgálhatjuk.
Az első keresést a FindFirst utasítással kell elvégeznünk.
if FindFirst(FSourceDir+'*.*',faAnyFile,F)=0 then begin
Az összes többi bejegyzés megkeresésére egy repeat – until blokkot használhatunk, a végén a FindNext utasítással.
until FindNext(F)<>0;
A keresést végül a FindClose utasítás zárja le.
FindClose(F);
Egy megtalált bejegyzéssel csak akkor foglalkozunk, ha az egy állomány, amely BMP vagy JPG kiterjesztéssel rendelkezik.
A BMP és JPG állományok között feldolgozás szempontjából különbséget kell tennünk.
Kép kivágása BMP-ből
if (LowerCase(ExtractFileExt(F.Name))='.bmp') then begin
A BMP-k kezelését a TBitmap osztály segítségével végezhetjük el.
bmp1:=TBitmap.Create;
A megtalált állományt betöltjük egy TBitmap objektumba.
bmp1.LoadFromFile(FSourceDir+F.Name);
Létrehozunk egy újabb objektumot, amelynek beállítjuk a méreteit.
bmp2.Width:=IWidth;
bmp2.Height:=IHeight;
A bmp1 objektum megadott téglalappal lefedett tartalmát a StretchBlt függvény segítségével másolhatjuk át a bmp2-be.
StretchBlt(bmp2.Canvas.Handle,0,0,IWidth,IHeight,bmp1.Canvas.Handle,ILeft,ITop,IWidth,IHeight,SRCCOPY);
Végül nem marad más hátra, minthogy a bmp2 tartalmát lemezre mentsük.
Kép kivágása JPG-ből
A JPG képek kezelésére a JPEG unit-ban található TJPEGImage osztály szolgál. Ebben az esetben is ugyanúgy járunk el, mint a BMP képek esetében, csak a művelet előtt végre kell hajtanunk egy JPG -> BMP konverziót, a végén pedig a BMP képet vissza kell alakítanunk JPG formátumba.
A JPG kép betöltésére és konvertálására az alábbi két utasítást használhatjuk.
jpg.LoadFromFile(FSourceDir+F.Name);
bmp1.Assign(jpg);
Ehhez hasonló a visszaalakítás és mentés.
jpg.Assign(bmp2);
jpg.SaveToFile(FDestinationDir+F.Name);

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 568. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |