Device-Independent bitképek
Az eszközfüggetlen bittérkép (DIB) egy színtáblát tartalmaz. A színtáblázat azt ismerteti, hogy a képpontértékek hogyan felelnek meg RGB színértékeknek, amelyek a fénykibocsátással előállított színeket írják le. Így a DIB bármilyen eszközön el tudja érni a megfelelő színsémát. A DIB a következő szín- és dimenzióinformációkat tartalmazza:
- Annak az eszköznek a színformátuma, amelyen a téglalap alakú kép létre lett hozva.
- Annak az eszköznek a felbontása, amelyen a téglalap alakú kép létre lett hozva.
- Annak az eszköznek a palettája, amelyen a rendszerképet létrehozták.
- A piros, zöld, kék (RGB) három- és képpontméretű bitek tömbje a téglalap alakú képen.
- Adattömörítési azonosító, amely jelzi a bittömb méretének csökkentéséhez használt adattömörítési sémát (ha van ilyen).
A szín- és dimenzióinformációk egy BITMAPINFO struktúrában tárolódnak, amely egy BITMAPINFOHEADER struktúrából áll, amelyet két vagy több RGBQUAD szerkezet követ. A BITMAPINFOHEADER struktúra meghatározza a képpont téglalapjának méretét, leírja az eszköz színtechnológiáját, és azonosítja a bitkép méretének csökkentéséhez használt tömörítési sémákat. A RGBQUAD struktúrák azonosítják a képpont téglalapban megjelenő színeket.
A DIB-knek két fajtája van:
- Alulról felfelé haladó DIB, amelyben a forrás a bal alsó sarokban található.
- Egy felülről lefelé elhelyezkedő DIB, amelyben a forrás a bal felső sarokban található.
Ha a DIB magassága a bittérkép-információs fejlécszerkezet Magasság tagjának jelzése szerint pozitív érték, akkor az egy alulról felfelé haladó DIB; ha a magasság negatív érték, az egy felülről lefelé elhelyezkedő DIB. A felülről lefelé lévő DIB-ek nem tömöríthetők.
A színformátum a színsíkok és a színbitek számában van megadva. A színsíkok száma mindig 1; a színbitek száma monokróm bitképek esetén 1, VGA-bitképek esetén 4, más színeszközök bitképeinél pedig 8, 16, 24 vagy 32. Az alkalmazás a GetDeviceCaps függvény meghívásával lekéri az adott kijelző (vagy nyomtató) által használt színbitek számát, és a BITSPIXEL függvényt adja meg második argumentumként.
A kijelzőeszköz felbontása képpont/méterben van megadva. Az alkalmazások ezt a háromlépéses folyamatot követve lekérhetik a videómegjelenítések vagy nyomtatók vízszintes felbontását.
- Hívja meg a GetDeviceCaps függvényt, és adja meg a HORZRES függvényt második argumentumként.
- Hívja meg GetDeviceCaps második alkalommal, és adja meg a HORZSIZE értéket második argumentumként.
- Ossza el az első visszatérési értéket a második visszatérési értékkel.
Az alkalmazás ugyanazt a háromlépéses folyamatot használva lekérheti a függőleges felbontást különböző paraméterekkel: a VERTRES a HORZRES helyett, a VERTSIZE pedig a HORZSIZE helyett.
A palettát RGBQUAD struktúrák tömbje jelöli, amelyek a megjelenítendő eszköz színpalettájában az egyes színek piros, zöld és kék intenzitású összetevőit határozzák meg. A palettatömb minden színindexe egy adott képpontra képez le a bitképhez társított négyszögletes régióban. A tömb mérete bitekben megegyezik a téglalap szélességével képpontban, a téglalap magasságával megszorozva képpontban, az eszköz színbitjeinek számával megszorozva. Az alkalmazások a GetDeviceCaps függvény meghívásával lekérhetik az eszköz palettájának méretét, második argumentumként pedig a NUMCOLORS függvényt.
A Windows támogatja a palettatömb tömörítését a 8 és a 4 bites, alulról felfelé haladó DIB-k esetében. Ezek a tömbök a futtatási hosszúságú kódolási (RLE) sémával tömöríthetők. Az RLE-séma 2 bájtos értékeket használ, az első bájt a színindexet használó egymást követő képpontok számát, a második bájt pedig az indexet határozza meg. A bitképtömörítésről további információt a BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERés BITMAPV5HEADER struktúrák leírásában talál.
Az alkalmazások a szükséges struktúrák inicializálásával és a GetDIBits függvény meghívásával hozhatnak létre DIB-t egy DDB-ből. Annak megállapításához, hogy egy eszköz támogatja-e ezt a függvényt, hívja meg a GetDeviceCaps függvényt, és adja meg a RC_DI_BITMAP RASTERCAPS-jelölőként.
A bitkép másolására szoruló alkalmazások a TransparentBlt használatával másolhatják a forrásbitképben lévő összes képpontot egy célbitképre, kivéve azokat a képpontokat, amelyek megfelelnek az áttetsző színnek.
Az alkalmazások egy DIB használatával állíthatnak be képpontokat a megjelenítő eszközön a SetDIBitsToDevice vagy a StretchDIBits függvény meghívásával. Annak megállapításához, hogy egy eszköz támogatja-e a SetDIBitsToDevice függvényt, hívja meg a GetDeviceCaps függvényt, és adja meg RC_DIBTODEV RASTERCAPS-jelölőként. Adja meg a RC_STRETCHDIB RASTERCAPS-jelzőként annak megállapításához, hogy az eszköz támogatja-e StretchDIBits.
A már meglévő DIB-t egyszerűen megjelenítő alkalmazások használhatják a SetDIBitsToDevice függvényt. Egy számolótábla-alkalmazás például megnyithatja a meglévő diagramokat, és megjelenítheti őket egy ablakban a SetDIBitsToDevice függvény használatával. Ha azonban ismételten újra szeretne újrarajzelni egy bitképet egy ablakban, az alkalmazásnak a BitBlt függvényt kell használnia. Például egy multimédiás alkalmazás, amely az animált grafikákat hanggal kombinálja, előnyös lehet a BitBlt függvény meghívása, mert gyorsabban hajtja végre, mint SetDIBitsToDevice.