Megosztás a következőn keresztül:


A Windows képalkotó összetevő működése

Felderítés és választottbírósági eljárás

A rendszerkép dekódolása előtt meg kell találni egy megfelelő kodeket, amely képes dekódolni ezt a képformátumot. A legtöbb rendszerben, mivel a támogatott képformátumok kódoltak, nincs szükség felderítési folyamatra. Mivel a Windows Képalkotó összetevő (WIC) platform bővíthető, képesnek kell lennie a kép formátumának azonosítására és a megfelelő kodekkel való egyeztetésére.

A futásidejű felderítés támogatásához minden képformátumnak olyan azonosító mintával kell rendelkeznie, amely a formátum megfelelő dekóderének azonosítására használható. (Erősen ajánlott, hogy új fájlformátumok esetén guid azonosítót használjon az azonosító mintához, mert az garantáltan egyedi lesz.) Az azonosító mintát minden olyan képfájlba be kell ágyazni, amely megfelel az adott képformátumnak. Minden dekódoló rendelkezik egy beállításjegyzék-bejegyzéssel, amely meghatározza a dekódolható képformátumok azonosító mintáját vagy mintáit. Amikor egy alkalmazásnak meg kell nyitnia egy képet, dekódert kér a WIC-ből. A WIC megkeresi a rendelkezésre álló dekódereket a beállításjegyzékben, és ellenőrzi az egyes beállításjegyzék-bejegyzéseket a képfájlba ágyazott mintával egyező azonosító minta alapján. A dekóder beállításjegyzék-bejegyzésekkel kapcsolatos további információkért lásd: Encoder-Specific Beállításjegyzék-bejegyzések

Amikor a WIC egyetlen dekódert talál, amely megfelel a képen található azonosító mintának, létrehozza a dekóder egy példányát, és átadja neki a képfájlt. Ha a WIC egynél több egyezést talál, meghív egy QueryCapability nevű metódust az egyes egyező dekódereken, hogy azok között döntőbíráljon, és megtalálja a legjobb egyezést. További információért lásd a Implementing IWICBitmapDecoderdokumentum QueryCapabilities szakaszát.

Dekódolás

A megfelelő dekóder kiválasztása és példányosítása után az alkalmazás közvetlenül a dekóderhez beszél. A dekódernek számos feladata van, amelyeket különböző felületeken valósít meg. Ezek a szolgáltatások a következők lehetnek:

  • Tárolószintű szolgáltatások
  • Keretszintű szolgáltatások
  • Metaadat-enumerálási szolgáltatások
  • Natív dekóder transzformációk
  • Állapotjelentések és lemondási támogatás
  • Nyers feldolgozási szolgáltatások

A tárolószintű szolgáltatások közé tartozik a legfelső szintű miniatűr lekérése (ha támogatott), az előnézet, a színkörnyezetek, a paletta (ha van) és a tárolóformátum, valamint a tárolón belüli egyes képkeretekhez való hozzáférés biztosítása. (Egyes tárolók csak egyetlen keretet tartalmaznak, míg mások, például a címkézett képfájlformátum (TIFF) több keretet is tartalmazhatnak.) Ez a szolgáltatáskészlet magában foglalja a dekóderre vonatkozó információkat, valamint az adott képfájlra vonatkozó képességeit is.

Az egyes keretek saját miniatűrökkel rendelkeznek, és saját színösszefüggésekkel, palettával és egyéb tulajdonságokkal is rendelkezhetnek, amelyek a keret szintjén jelennek meg. A keret szintjén végrehajtott legfontosabb művelet azonban az adott keret képbitjeinek tényleges dekódolása.

A WIC metaadat-olvasókat biztosít a leggyakoribb metaadat-formátumokhoz (IFD, EXIF, IPTC, XMP, APP0, APP1 és egyéb formátumok), és támogatja a külső metaadat-formátumok bővíthetőségét is. Ez felszabadítja a metaadatok elemzéséért felelős kodekeket. A kodek azonban felelős a metaadatblokkok számbavételéért és az egyes blokkok metaadat-olvasójának lekéréséért. A WIC ugyanúgy hajtja végre a metaadat-kezelők felderítését, mint a kodekek esetében, a blokkfejléc mintája alapján, amely megfelel a metaadat-kezelő beállításjegyzék-bejegyzésében szereplő mintának. További információ: Encoder-Specific beállításjegyzék-bejegyzések

A dekódolók nem szükségesek az átalakítási műveletek natív támogatásához, de így jelentős teljesítményoptimalizálást tesznek lehetővé, amelyek jobb végfelhasználói élményt biztosítanak. Az alkalmazások létrehozhatnak például különböző átalakításokat (méretezés, körülvágás, forgatás és képpontformátum-átalakítás) a kép renderelése előtt. Az átalakítási folyamatokkal kapcsolatos további információkért lásd IWICBitmapSource. Az átalakítási folyamat létrehozása után az alkalmazás a folyamat végső átalakítását kéri, hogy létrehozza azt a bitképet, amely az összes átalakítás képforrásra való alkalmazásából ered. Ezen a ponton, ha maga a dekóder képes átalakítási műveleteket végrehajtani, a WIC megkérdezi, hogy a kért átalakítások közül melyiket tudja végrehajtani. Azokat a kért átalakításokat, amelyeket a dekódoló nem tud végrehajtani, a WIC hajtja végre a dekódolt képen, mielőtt visszaküldené azt a hívónak. Ez az optimalizált átalakítási folyamat jobb teljesítményt nyújt, mint az egyes átalakítások egymás utáni végrehajtása a memóriában, különösen akkor, ha az átalakítások egy része vagy egésze végrehajtható a dekódolási folyamat során.

Az előrehaladási értesítések és a lemondási támogatás lehetővé teszi, hogy az alkalmazás hosszú műveletekre vonatkozó állapotjelentéseket kérjen, valamint lehetővé teszi, hogy az alkalmazás lehetőséget biztosítson a felhasználónak egy túl hosszú művelet megszakítására. Ez azért fontos, mert ha egy felhasználó nem tud lemondani egy műveletet, úgy érezheti, hogy a folyamat lefagyott, és az alkalmazás bezárásával próbálja meg megszakítani.

Ezeket az interfészeket részletesen ismerteti a WIC-kompatibilis dekóderimplementálásáról szóló szakasz.

A nyers feldolgozási szolgáltatások közé tartozik a kamera beállításainak (például az expozíció, a kontraszt és az élezés) beállítása, vagy a színtér módosítása a nyers bitek feldolgozása előtt.

Kódolás

A dekódolókhoz hasonlóan a kódolóknak is vannak olyan feladataik, amelyeket interfészeken keresztül valósítanak meg. A kódolók által nyújtott szolgáltatások kiegészítik a dekóderek által nyújtott szolgáltatásokat, kivéve, hogy nem olvassák ki a képadatokat. A kódolók a következő kategóriákban is nyújtanak szolgáltatásokat:

  • Tárolószintű szolgáltatások
  • Keretszintű szolgáltatások
  • Metaadatok számbavétele és frissítése
  • Előrehaladási értesítés és lemondás támogatása

A kódolók tárolószintű szolgáltatásai közé tartozik a legfelső szintű miniatűr beállítása (ha támogatott), az előnézet és a paletta (ha van), valamint az egyes képkeretek iterálása, hogy szerializálhatók legyenek a tárolóban.

A kódoló keretszintű szolgáltatásai a dekóderhez tartozókat tükrözik, azzal a kivételével, hogy olvasás helyett kiírják a képadatokat, a miniatűröket és a kapcsolódó palettát vagy más összetevőt.

A kódoló metaadat-enumerálási szolgáltatásai közé tartozik az írandó metaadatblokkok iterálása, valamint a megfelelő metaadat-írók meghívása a metaadatok lemezre való szerializálásához.

Ezeket az interfészeket részletesen ismertetjük a WIC-kompatibilis kódolóimplementálásáról szóló szakaszban.

A kodek élettartama

A WIC-kodekek példányosítva egyetlen képet kezelnek, és általában rövid élettartamúak. A rendszerkép betöltésekor jön létre, és a rendszerkép bezárásakor jelenik meg. Az alkalmazások nagy számú kodeket használhatnak egyidejűleg átfedésben lévő élettartammal (gondoljunk csak arra, hogy több száz képet tartalmazó könyvtárban görgetünk), és több alkalmazás is ezt teszi egyszerre.

Bár egyes kodekek élettartama annak a folyamatnak az élettartamára terjed ki, amelyben élnek, a WIC-kodekek esetében ez nem így van. A Windows Vista Fényképtár, a Windows Explorer és a Photo Viewer, valamint számos más alkalmazás wic-en alapul, és a kodek használatával jeleníti meg a képeket és a miniatűröket. Ha a kodek élettartama a folyamat teljes élettartamára terjed ki, minden alkalommal, amikor egy kép vagy miniatűr megjelenik a Windows Vista Explorerben, a kodek a rendszerkép dekódolásához példányosítva a memóriában marad, amíg a felhasználó újra nem indítja a számítógépet. Ha a kodek soha nem lesz eltávolítva, az erőforrásai gyakorlatilag "kiszivárogtak", mert a rendszer más összetevői nem használhatják őket.

Kodek WIC-engedélyezése

  1. Implementáljon egy tárolószintű dekóderosztályt és egy keretszintű dekóderosztályt, amely elérhetővé teszi a képek dekódolásához és a metaadatblokkokon keresztüli iteráláshoz szükséges WIC-interfészeket. Ez lehetővé teszi, hogy minden WIC-alapú alkalmazás ugyanúgy kapcsolatba lépjen a kodekkel, mint a szabványos képformátumokkal.
  2. Implementáljon egy tárolószintű kódolóosztályt és egy keretszintű kódolóosztályt, amely elérhetővé teszi a képek kódolásához és a metaadatblokkok képfájlba való szerializálásához szükséges WIC-interfészeket.
  3. Ha a tároló formátuma nem TIFF- vagy JPEG-tárolón alapul, előfordulhat, hogy metaadat-kezelőket kell írnia a gyakori metaadat-formátumokhoz (EXIF, XMP). Ha azonban TIFF- vagy JPEG-alapú tárolóformátumot használ, ez nem szükséges, mert delegálhatja a rendszer által biztosított metaadat-kezelőknek.
  4. Az összes képfájlba ágyazzon be egy egyedi azonosító mintát (a GUID-t javasoljuk). Ez lehetővé teszi, hogy a rendszerkép formátuma megegyezik a kodekével a felderítés során. Ha WIC csomagolót ír egy meglévő képformátumhoz, meg kell találnia egy olyan bitmintát, amelyet a kódoló mindig beleír a képformátumhoz egyedileg kapcsolódó képfájlokba, és ezt azonosítási mintaként kell használnia.
  5. Regisztrálja a kodeket a telepítéskor. Ez lehetővé teszi, hogy a kodek futásidőben azonosítható legyen, úgy hogy a beállításjegyzékben található azonosító mintát összeveti a képfájlba ágyazott mintával.
  6. A Windows 7-től kezdődően a WIC megköveteli, hogy a kodekek 'Both' COM apartman típusúak legyenek. Ez azt jelenti, hogy a megfelelő zárolást kell elvégeznie a többszálas helyzetekben a lakásközi hívók és hívók kezeléséhez. További információkért lásd a többszálas lakástámogatás következő szakaszát.
  7. 64 bites platformok támogatása: Windows 7 esetén a WIC megköveteli a külső WIC-kodekek 32 bites és 64 bites natív bináris fájlokként való kézbesítését. Ezenkívül a 32 bites űrlapnak 64 bites rendszereken kell telepítenie és futtatnia, a külső Windows 7 kodek telepítőjének pedig a 32 bites és a 64 bites bináris fájlokat is telepítenie kell a 64 bites rendszerekre.

Többszálas lakástámogatás a WIC-ben

A többszálas lakásban (MTA) lévő objektumokat az MTA-n belül tetszőleges számú szál egyidejűleg hívhatja meg. Ez lehetővé teszi a többmagos rendszerek és bizonyos kiszolgálói forgatókönyvek jobb teljesítményét. Emellett az MTA WIC kodekek meghívhatnak más objektumokat az MTA-ban anélkül, hogy a különböző STA apartmanokban lévő szálak közötti híváshoz kapcsolódó szerializációs költségekkel járna. A Windows 7-ben az összes beépített WIC-kodek frissült, hogy támogassa az MTA-kat, beleértve a JPEG, a TIFF, a PNG, a GIF, az ICO és a BMP használatát. Különösen ajánlott, hogy a külső kodekek az MTA-k támogatására legyenek megírva. Azok a külső kodekek, amelyek nem támogatják az MTA-kat, jelentős teljesítménycsökkenést okoznak a többszálas alkalmazásokban a marshaling miatt. Az MTA támogatásának engedélyezéséhez megfelelő szinkronizálást kell végrehajtani a harmadik féltől származó kodekben. Ezeknek a szinkronizálási technikáknak a pontos megvalósítása meghaladja a jelen tanulmány hatókörét. További információ a COM-objektumok szinkronizálásáról: COM-szálmodellek ismertetése és használata.

fogalmi

Bevezetés (WIC-kompatibilis kodek írása)

WIC-kompatibilis dekóder megvalósítása

WIC-kompatibilis kodek írása

Windows képalkotó összetevő áttekintése

WIC-metaadatok áttekintése