Átláthatóság - ez csak

Windows 98 és könyvtári msimg32.dll

Mielőtt elkezdené, győződjön meg arról, hogy megértjük egymást:
  • Bitmap, raszter (bittérkép) - téglalap alakú képet képpontokból áll.
  • Pixel - a legkisebb eleme a kép pontot a képernyőn, vagy a raszter memóriában.
  • Átláthatóság - az ingatlan egyes pixelek nem jelennek meg a kimeneti eszköz, így az eredeti kép ép.
  • Áttetszőség - ilyen kölcsönhatás pixel, ahol a pixelek vannak kibocsátva egy látható raszter, és a háttérképet.
  • Sprite - bitmap átlátszó és áttetsző területeket.

Miért raszteres képek átláthatóság és áttetszőség az egyes szakaszok? Ezek fontos elemei a Windows grafikus felhasználói felület, ami látható minden alkalommal, amikor bekapcsolja a számítógépet. Asztali ikonok átlátszó szakaszok, így láthatja, „a” őket. Amikor dolgozik a Windows 98 mappában húzza minden tárgyat, annak ikonja áttetszővé válik, amely lehetővé teszi, hogy mi jelenleg alatta. És végül, ne felejtsük el, az ilyen „grafikoemkih” programok, mint a játékok. Nehéz elképzelni, hogy a gondosan megtervezett sík felület „lövöldözős” Minden hajó téglalap alakú. És amikor rendering robbanások, kívánatos, hogy azok félig átlátszó, közelebb a valóság a kép.







Általában - valami ebben a témában írt elég sokat. Ahhoz, hogy megértsük az alapvető megszerzése mechanizmusának átláthatóság hatásokat Azt javasoljuk elolvasni a cikket Ron Jerry „Bitmaps átláthatóságot” (megtalálható az MSDN lásd a Műszaki Articles-> multimédia> GDI). Én is ajánlom, hogy tárja fel vannak cikkek Dale Rogerson ( „Sprite, hogy a világ Go Round”) és a Herman Rodenta ( „Animáció Win32”).

Windows 95 és listák képek

A kiadás a Windows 95 álló programozók kényelmes volt könyvtár közös ellenőrzése. Ez már nem csak az új (most mindenki által ismert) ellenőrzés, hanem a nem vizuális komponensek - egy listát a kép (Image List kontroll). Fő célja -, hogy tartsa egy sor képek az azonos méretű. Ez kényelmes használható a különböző elemek - például a szerszám (eszköztár) panelek:

Mi sokkal jobban érdekli a másik érdekes jellemzője - a tárolt képek listája információk átláthatóságát. Ez úgy érhető el az alábbi két módon történhet:

  • Betöltése bitmap jelzi a pixelek színe szerint átlátható;
  • Előállítása speciális átlátszó maszk - fekete-fehér raszter, ahol a fekete képpontok jelöljük átláthatóság megfelelő pontokat az alap raszter. Ebben az esetben az átláthatóságot a maszkot kell ugyanolyan méretű, mint a fő minta.

Meg kell érteni, hogy mindkét esetben a kép lista tartalmazni fogja átláthatóságát maszk, éppen akkor, amikor az első módszer, akkor jön létre az Ön számára. Mi a módja annak, hogy válasszon - az íze minden programozó. Én általában megtalálható a palettán néhány felesleges szín és rendelje hozzá átlátszó. A legtöbb esetben nem hordoz egy fényes lila virágok (RGB = (255,0,255)), de most úgy döntött, fehér igazolásához átláthatóság hatás:


Létrehozása átlátszó képek listák

Készítsen egy listát a képek és feltölteni bitmap átláthatóságot lehetséges így:

A példákban azt feltételezzük, hogy a bitmap erőforrás-programok, és van egy színmélység 24 bit (16 millió. Szín). Amikor létrehoz egy listát, akkor meg kell adni a méret A betöltött (cx, cy), színe méret (ILC_COLOR24, 16 millió szín) jele és a jelenléte a maszk (ILC_MASK). Az utolsó két paraméter létrehozása (a) meghatározza a képek száma a listában, és növekmény listában, ha nincs elegendő hely. Makró utasításoknak megfelelő RGB színek a 24-bites tartományban, ebben az esetben - az átláthatósági színt.

Elvileg lehet feltölteni egy képet, és kihívást jelent, de ez a módszer nem támogatja a színes képek (a mi példánkban):

Alapértelmezésben ez a képernyő van korlátozva 16 színben.

Rajz Képlistából

Mi a képek listáját valóban hasznos, mert ez a munka megkönnyítése rajz. Akkor visszahívja a memória számát és sorrendjét a paramétereket a BitBlt ()? De hátránya, mert az kell, hogy készítsen egy kiegészítő eszköz keretében a memóriában? Mindez nem csak megzavarja a kezdő, hanem a gyakorlott programozók.

A helyzet még bonyolultabb, ha foglalkozunk az átláthatóságot. Meg kell jeleníteni egy képet többször, különböző paraméterek raszteres műveletek (Raster működés, ROP). Minden alkalommal fogunk megjelenik egy kis kép egy űrhajót, meg kell csinálni a sok munkát.

Szerencsére a Microsoft programozók már megtette nekünk. Tudod felhívni a raszter kép szerepel a listán, egyszerűen hívja ImageList_Draw (). Segítségével MFC ez a felhívás a következőképpen néz ki:







Itt dendritikus - a mutató az eszköz keretében (CDC), 0 - kimenet számát a képlistából, m_drawPoint - az elején a kimeneti mező pozícióját. ILD_TRANSPARENT zászló azt jelzi, hogy a kimeneti kell végrehajtani, figyelembe véve az átláthatóság maszk.

A kíváncsiak tudatja Önnel, hogy a végrehajtás átláthatóságát hatás érhető el azzal a módszerrel, hogy felhívja Geri Ron Fekete Forrás módszer, azaz a „Eljárás fekete erő.” Ez lehetővé teszi, hogy megjelenítse a képet átlátszó területeket két BitBlt () hívás három helyett, de ehhez előre helyébe pixel áttetsző, fekete. Ezért betöltés raszteres képek a listán, meg nem változtatja.

Most kap mintegy eredményeként a hívás:

Windows 98 és könyvtári msimg32.dll

Windows 98 hozott egy új, egyszerű módja annak, hogy kiadási tiszta képeket. A tag msimg32.dll könyvtár tartalmazza az új funkciók csábító grafikai hatásokat. Ahhoz, hogy használni, akkor kell csatlakozni a projekt építése során msimg32.lib fájlt.

Most raszter átláthatóság jeleníthető meg egyszerre használva TransparentBlt funkciót, meghatározva az átlátszó szín az utolsó paraméter a függvény:

„Wow - egyszerre!” és azt mondod. lesz jobb. Ismét szükség van egy kompatibilis eszközre környezetet, amelyben választani kiadási raszteres. Ismét - a hosszú (és intuitív) paraméter lista. De lehetőség van kimeneti szabályozás. Ebben a példában, x, y, x1, y1 - koordinátáit a kiindulási pont a vevőnél és a forrás, ill. Paraméterek dstX és dstY - a méret a kimeneti terület és srcX és srcY - a szélessége és magassága a téglalap, a raszteres kijelzőn. Mi van, ha kérnek különböző értékeket? Az eredmény itt látható:

Mint látható, ez a funkció tartalmazza azt a lehetőséget tömörítés / feszültség bitmap. Csak ne vigyük túlzásba, és nem adja át, mint a méret a negatív értékek - tükrözés TransparentBlt () nem tudja, hogyan kell létrehozni.

Add, hogy TransparentBlt () függvény a származtatás alapján a képességek DirectX eszköz, amely biztosítja a teljesítmény javítására a hagyományos módszerekkel.

tanács
Ne felejtsük el, használata után a készülék összefüggésben kiválasztani azt a kezdő képernyő (temp a példánkban). Egyébként van egy szivárgás a grafikus erőforrás a rendszer.

AlphaBlend (): "Semi" - nem feltétlenül 1/2

Az összes fenti módszerek működnek csak egy modellt az átláthatóság említett számítógépes grafika, Chroma Key. Ez azt jelenti, hogy az átláthatóság van rendelve egy adott szín. Más, fejlettebb modell az úgynevezett alfa keverés. Használatával az átláthatóság (Alpha) leírására használják jellemzőit a pixelek eltérő szín komponense (R, G, B). Az átláthatóság mértéke határozza meg a kölcsönös ennek a paraméternek.

A kinevezés a paraméterei, általában nyilvánvaló a prototípus. Különösen érdekes az utolsó lehetőség - BLENDFUNCTION. Ez egy szerkezet (összesen négy bájt), amely meghatározza a kimeneti módot.

Mi ez? Az a tény, hogy a AlphaBlend () működhet két különböző módban.

Egyszerű mód (a teljes átláthatóság)

Az első (és legkönnyebben használható) AlphaBlend mód () azt feltételezi, hogy az alfa-érték van beállítva a teljes képet. Ebben az esetben ez minden képpont kivétel nélkül:

Ezt az eredményt kaptuk, mint BLENDFUNCTION méret:

Mert BlendOp területeken jelenleg meghatározott egyetlen megengedett értéket - AC_SRC_OVER.
BlendFlags mezőnek tartalmaznia kell 0-ra.
Rosszul dokumentált AlphaFormat paraméter határozza meg a kölcsönhatás pixelek a forrás és a cél, amit fogunk beszélni tovább.
SourceConstantAlpha paraméter határozza meg a fokú homály. Ha ezt a mezőt 0, akkor nem fogja látni a képernyőn egyáltalán. A maximális érték illeszkedik típus byte 255. Ez a kimenet raszter teljesen felülírja a célterület. De miért, ebben az esetben, AlphaBlend ()? És ezt az értéket használjuk, nagy részben, a második mód.

alfa üzemmódban

Szükség van néhány további képzést. Ez a raszter mód számára készített, kijelző, információt kell tartalmaznia az átláthatóságot az egyes pixelek. Ez úgy érhető el, például, formátumának felhasználásával 32 bit per pixel (egy bájt színenként komponenst és egy - az alfa-csatorna).

Nehézségek merülnek fel itt semmi. Nem vagyok tisztában minden grafikus csomag, amely lehetővé teszi, hogy tárolja bitmap az alfa-csatorna olyan formában alkalmas AlphaBlend (). Amikor létrehoz egy raszteres program, mi lehet menteni a lemezre (bitmap formátumban 32-bit). Elolvasta a népszerű programok, mint a ACDSee, de LoadBitmap () függvény és a LoadImage () megtagadják betölteni. Amikor megpróbál tedd be egy erőforrás rc.exe Én estek ki a belső hibaüzenetet.

De ne csüggedjen. Mi lehet készíteni egy bitmap memória, amely egyesíti, például két raszter - a képen egy tárgy, és az árnyék. Szerencsére AlphaBlend () függvény nem működik a bitmap segítségével létrehozott CreateDIBSection ():

Itt HDC - összefüggésben, amely kompatibilis a kimeneti eszköz, pbmi - egy mutató a szerkezet BITMAPINFO tájékoztatást a méret és szín mélysége a raszter elő. IUsage paraméter határozza meg, hogy mi legyen a raszter puffer - indexek a színpaletta (DIB_PAL_COLORS), vagy közvetlenül az értéküket (DIB_RGB_COLORS). Nyilvánvaló, hogy a második - a TrueColor mód paletta nincs szükség.
A mutató a puffer által létrehozott sikeres hívás vissza ppvBits paramétert.
A paraméterek és hSection dwOffset ha dolgozik, raszteres memória jeleznie kell 0-ra.

megjegyzés
Mindez nem jelenti azt, hogy a sprite az alfa-csatorna nem lehet tárolni a program forrásait. Akkor is őket, mint a saját forrás, letölthetők LoadResource (), és töltse ki a puffer által létrehozott CreateDIBSection () megállapításait. De ne felejtsük el, hogy ez jelentősen növeli a méretét, a végrehajtható. Ezen felül, akkor érdemes podgruzki előre kiszámított hasonló program bitmap külső fájlból - jelenti teljesítését a könyvtárban, vagy a paraméterek és hSection dwOffset hívásakor CreateDIBSection ().

Használata CreateDIBSection () megkönnyíti a hozzáférést a kép bitek: egyébként ezeket a képeket is levezethető csak képernyős módban True Color 32 bit. A kezelés az ilyen adatok formátum ideális RGBQUAD szerkezete:

Alpha csatorna tárolható a rgbReserved, bár erre a célra, és nem kívánjuk :) Ezen kívül van egy másik (nem dokumentált) lehetőség - használható funkciót AlphaDIBBlend (), amely azt nem tekintjük.

Az eredmény itt látható:

Részletek a munka a biteket elhagyjuk raszteres (mindez megtalálható a mellékelt tervezet). Megjegyzem, hogy ez csak a kimenetet használjuk BLENDFUNCTION méret:

tanács
Ha az alfa csatorna még a lehetőség is fennáll anélkül, hogy a konverzió raszteres bitek változtatni az átláthatóságot a teljes képet - SourceConstantAlpha működik ebben az esetben.

És végül ne feledjük, hogy a AlphaBlend () is szükségessé teszi a projekt az összeállítás msimg32.lib import könyvtár, amely nem áll rendelkezésre a Windows 95.




Kapcsolódó cikkek