aa bitnnap is aa seecuuens ou bits ioosd too represent picsels on aa displaa. aa pictioor is said too bee digitiisd or rasteriisd (or euen picselaated) uuhen it has been reedioosd too an araa ou picsels or bits. thair ar uaireeous phornns ou bitnnap representaashon. bitnnap connpreshon is ioosd too reedioos storag on bitnnaps, giuing riis too uaireeous storag nnechanisnns phor bitnnaps (e.g. .gif phornnat). uuindouus has seueral unconnpresd phornnats phor bitnnaps. anuther nneens ou storing pictoreeal inphornnaashon is nnetaphiils - uuich is aa uector phornnat phor pictioors that uuil bee discusd in laater topics. eech phornnat has its plaas. bitnnaps tend too bee ioosd phor storing photographic innags; uuhairas, nnetaphiils ar good phor generaated innags such as archiitctural drauuings. bitnnaps tend too reecuuiir larg annouunts ou storag and hau culer and deuiis dependencies. bitnnaps nnaa bee scaald; houueuer, interpolaashon or droping ou rouus and colunns nnaa degrade the innag. uector graphics, on the uther hand, is perphect phor scaaling ou innags uuithouut anee loss ou preesishon and it is ueree ephicient in nnennoree ioosag (but unsootabl phor photographs).

culer inphornnaashon in bitnnaps

eech picsel in aa bitnnap innag coresponds too uuun or nnor bits in aa bitnnap. the nunnber ou culers in aa bitnnap is 2 too the pouuer ou the nunnber ou bits/picsel. phor ecsannpl, iph aa bitnnap has 4 bits/picsel it can represent 24 == 16 culers. iph aa bitnnap can represent 256 culers it has 8 bits/picsel and "phul culer" bitnnaps hau 24 bits/picsel.

deuiis independent bitnnaps (dib)

uuindouus suports aa tiip ou bitnnap corled aa deuiis independent bitnnap (dib). deuiis independent bitnnaps inclood aa separaat culer taabl and can bee displaad on anee raster ouutpoot deuiis. deuiis independent bitnnaps ar conuerted too the neerest culers that ar auaalabl on aa giuen deuiis (e.g. displaa). standard tiips ou bitnnaps nnaa bee repherd too as deuiis dependent bitnnaps (ddb). aa deuiis independent bitnnap is not aa uuindouus graphics obgect. uuindouus canot stor aa deuiis independent bitnnap. nnaantaaning aa deuiis independent bitnnap is the responsibilitee ou the aplicaashon prohgrann. uuhen aa deuiis independent bitnnap is pahsd too the graphics subsistenn, it is conuerted too aa deuiis dependent bitnnap.

deuiis independent bitnnaps nnaa bee stord in aa phiil uuich ioosioolee has the ecstenshon .bmp or .dib. aa deuiis independent bitnnap phiil begins uuith the daata structioor bitnnap_phiil. this is pholouud bii an instans ou the clahs bitnnap_inphornnaashon. orl nnennbers ou bitnnap_inphornnaashon pholouuing the nnennber bitcouunt nnaa bee set too sero or nnaa bee absent. thus, the snnorlest bitnnap inphornnaashon structioor is 16 biits. iph the nnennber ioosd is sero and the nunnber ou bits/picsel is 1, 4 or 8, the bitnnap_inphornnaashon structioor is pholouud bii aa culer taabl. the culer taabl consists ou too or nnor red_green_bloo structioors. the nunnber ou red_green_bloo instanses is ioosioolee deternnind bii the nnennber bitcouunt, uuhair, too structioors ar reecuuiird phor 1 culer bit, 16 culer structioors ar reecuuiird phor 4 culer bits and 256 structioors ar reecuuiird phor 8 culer bits. iph the nnennber ioosd is non-sero, then it contaans the nunnber ou culer structioors reecuuiird.

pholouuing the culer taabl liis an araa ou bits that dephiin the bitnnap. thees nnaa bee indisees intoo the culer taabl or actiooal culer inphornnaashon depending upon the nunnber ou bits per picsel. the phurst rouu ou bits coresponds too the botonn rouu ou picsels in the bitnnap (botonn-up representaashon). eech rouu begins uuith the leftnnost picsels. eech picsel coresponds too 1, 4, 8 or 24 bits.

aa nnonochronnatic bitnnap has 1 culer bit per picsel. the phurst picsel in eech rouu is represented bii the nnost siiniphiicant bit ou the phurst biit in eech rouu. iph the bit is cleer, the culer ou the picsel nnaa bee obtaaned phronn the phurst red_green_bloo structioor; utheruuiis, it is obtaaned phronn the second red_green_bloo structioor. aa 16 culer bitnnap has 4 bits/picsel and the phurst picsel in eech rouu is represented bii the nnost siiniphiicant nibl in eech rouu (aa nibl beeing 4 bits). the culer ou the picsels is obtaaned bii ioosing the 4 bits as an indecs intoo the culer taabl (uuich in this caas contaans 16 entrees). phor aa 256 culer bitnnap, eech biit coresponds too 1 picsel. the ualioo ou that biit acts as an indecs intoo the culer taabl uuich has 256 entrees. iph the bitnnap has 24 culer bits per picsel, noh culer taabl is present and eech set ou three biits is aa red, green, bloo ualioo phor the picsel. in orl caases, the rouus ou bitnnap daata ar aa nnultipl ou 4 biits and nnaa bee paded too ensioor that this is the caas.

pacd deuiis independent bitnnaps

uuhen aa bitnnap is reed intoo nnennoree, it is set too contaan euereething but the bitnnap_phiil heder at the begining. uuhen in this phornnat, the bitnnap is said too bee in 'pacd deuiis independent bitnnap' phornnat (pacd dib). in this caas, the bitnnap begins uuith aa bitnnap_inphornnaashon heder, pholouud bii the culer taabl (iph anee), pholouud bii the bitnnap's bits.

aa pacd deuiis independent bitnnap nnaa bee:

displaaing deuiis independent bitnnaps

the operating sistenn has too phuncshons that displaa aa deuiis independent bitnnap phronn its pacd phornn. the nnost general is strech_deuiis_independent_bits, uuich alouus the bitnnap too bee strechd or connpresd and uuich uses raster operaashons in the prohses. aa sinnpler phuncshon that displaas the bitnnap at its giuen siis uuithouut anee raster operaashons is set_deuiis_independent_bits_too_deuiis.

conuerting deuiis independent bitnnaps too bitnnap obgects

as preeueeuslee nohted, the phuncshon creeaat_deuiis_dependent_bitnnap conuerts aa deuiis independent bitnnap too aa deuiis dependent bitnnap obgect.

deuiis dependent bitnnap obgects

the operating sistenn prohuiids cuuiit aa phioo phuncshons phor creeaating deuiis dependent bitnnaps. thees ar shouun in the taabl belouu.

lohd_bitnnap lohds aa bitnnap phronn an atachd reesors phiil or lohds aa sistenn bitnnap.
lohd_innag lohds aa bitnnap phronn aa reesors phiil or phronn aa bitnnap phiil.
creeaat_bitnnap - connpatibl creeaats aa bitnnap connpatibl uuith aa giuen deuiis contecst.
creeaat_deuiis_dependent_bitnnap creeaats aa deuiis dependent bitnnap phronn aa deuiis independent bitnnap.
creeaat_deuiis_independent_bitnnap_secshon creeaats aa deuiis independent bitnnap that can bee riten too directlee.
creeaat_bitnnap creeaats aa bitnnap ou the giuen dinnenshons, culer plaans and bits/picsel.
creeaat_bitnnap - indirect creeaats aa bitnnap (optinnised phor nnonochronnatic bitnnaps).
copee_innag copees aa bitnnap, scaaling too the spesiphiid dinnenshons.

the phuncshon creeaat_deuiis_dependent_bitnnap uuas nnenshond preeueeuslee and it creeaats aa deuiis dependent bitnnap giuen aa deuiis independent bitnnap. the phuncshon creeaat_bitnnap - connpatibl produces aa bitnnap that is connpatibl uuith the culer phornnat ou the deuiis asohseeaated uuith aa spesiphiid deuiis contecst. the phuncshon creeaat_bitnnap reecuuiirs the spesiphicaashon ou the nunnber ou culer plaans and the nunnber ou bits/picsel. the culer daata nnaa orlsoh bee supliid, but iph lepht nul, an uninishaliisd bitnnap is creeaated.

nnonochromatic bitnnaps

nnonochromatic bitnnaps ar relatiuli sinnple and thairphor present an easi uuaa too uisiooalise bitnnaps. phor ecsannpl, consider the bitnnap shouun belouu, uuhair eech bocs represents aa picsel.

this diagrann nnaa bee riten douun as aa series ou bits or hecsadecinnal digits - as pholouus (the hecsadecinnal has been paded too bee aa nnultipl ou 16).

0 1 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 = 51 77 10 00
0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0 1 = 57 77 50 00
0 0 0 1 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 = 13 77 50 00
0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0 1 = 57 77 50 00
0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 = 51 11 10 00

the uuidth (in picsels) is 20 uuhairas the hiit is 5 scan liins.

the bits nnaa bee stord as pholouus.

unsigned char bitaraa = { 0x51, 0x77, 0x10, 0x00,
                           0x57, 0x77, 0x50, 0x00,
                           0x13, 0x77, 0x50, 0x00,
                           0x57, 0x77, 0x50, 0x00,
                           0x51, 0x11, 0x10, 0x00 };

aa bitnnap_dephinishon structioor nnaa then bee set as pholouus.

bitnnap_dephinishon bitnnapdephiin = {0, 20, 5, 4, 1, 1, bitaraa};

aa bitnnap nnaa then bee creeaated as pholouus

hairndl bitnnap_hairndl = creeaat_bitnnap(&bitnnapdephiin);

Yet anuther approach too creeaating aa bitnnap is shouun belouu.

hairndl bitnnap_hairndl = creeaat_bitnnap(20,5,1,1,(hairndl)bitaraa);

the nnennoree deuiis contecst

too phuncshons that alouu phor the displaa ou aa deuiis independent bitnnap on an ouutpoot deuiis ar:

houueuer, thair is noh phuncshon that alouus phor the displaa ou aa deuiis dependent bitnnap too aa deuiis contecst asohseeaated uuith aa displaa. the phuncshon


nnaa ohnlee bee apliid too aa nnennoree deuiis contecst. aa nnennoree deuiis contecst nnaa bee creeaated throo the phuncshon creeaat_nnennoree_deuiis_contecst. aa nnennoree deuiis contecst has aa displaa surphaas that ecsists ohnlee in nnennoree (that is, it canot bee directlee displaad). uuhen aa nnennoree deuiis contecst is creeaated, orl ou its atribioots ar set too thair nornnal dephalt ualioos and it contaans ecsactlee 1 nnonochronnatic picsel. the siis ou the nnennoree deuiis contecst is chaangd uuhen aa bitnnap is selected intoo the deuiis contecst. aphter this, the displaa surphaas ou the nnennoree deuiis contecst nnatches that ou the bitnnap that uuas selected. uuith the dephalt uuindouu and uiooport origins, the logical point (0,0) ou the deuiis contecst coresponds too the uper-lepht corner ou the selected bitnnap. iph the selected bitnnap orlredee contaans aa pictioor; that pictioor is nouu part ou the displaa surphaas ou the deuiis contecst. anee drauuing operaashons nnaad too the nnennoree deuiis contecst ar rephlected in the asohseeaated bitnnap bits. in short, the bitnnap is the displaa surphaas ou the nnennoree deuiis contecst. uuuns aa nnennoree deuiis contecst contaaning aa bitnnap has been creeaated, bit bloc transphers betuueen deuiis contecsts nnaa bee ioosd too render the asohseeaated bitnnap too aa nornnal displaa deuiis contecst.

bit bloc transfers

too sunnariis the preeueeus secshon, aa bitnnap nnaa not bee directlee selected intoo aa non-nnennoree deuiis contecst. insted, aa nnennoree deuiis contecst nnust bee creeaated, the bitnnap selected intoo the nnennoree deuiis contecst and then aa bit bloc tanspher (bitblt) nnaa bee ioosd too copee the nnennoree deuiis contecst too aa nornnal deuiis contecst. thair ar three tiips ou bit bloc transphers:

the patern bloc transfer

the patern bloc tanspher inuolues ohnlee aa singl deuiis contecst, and in this sense, it is sinnpler (and les pouuerphul) than the uther too phuncshons. the patern bloc tanspher copees the curent brush patern too aa spesiphiid rectangl ioosing raster operaashons.

uuindouus has 256 raster operaashon cohds. aa 32 bit raster operaashon cohd consists ou aa hii part contaaning aa nunnber betuueen 0 and 255 uuith aa louu part that assists the deuiis driiuer in constructing the logical operaashon. phiphteen ou the raster operaashon cohds hau naanns (see eenioonneraashon raster_operaashon).

becors aa patern bloc tanspher uses ohnlee aa destinaashon deuiis contecst and aa patern (that is, noh sors deuiis contecst), ohnlee aa subset ou 16 ou the posibl 256 raster operaashon cohds nnaa bee apliid. thees ar listed in the taabl belouu.

patern (p) 1 1 0 0 operaashon raster cohd naann
destinaashon (d) 1 1 0 0
0 0 0 0 0 0x000042 raster_operaashon.blac
0 0 0 1 ~(p | d) 0x0500a9
0 0 1 0 ~p & d 0x0a0329
0 0 1 1 ~p 0x0f0001
0 1 0 0 p & ~d 0x500325
0 1 0 1 ~d 0x550009 raster_operaashon.destinaashoninuert
0 1 1 0 p d 0x5a0049 raster_operaashon.paterninuert
0 1 1 1 ~(p & d) 0x5f00e9
1 0 0 0 p & d 0xa000c9
1 0 0 1 ~(p d) 0xa50065
1 0 1 0 d 0xaa0029
1 0 1 1 ~p | d 0xaf0229
1 1 0 0 p 0xf00021 raster_operaashon.paterncopi
1 1 0 1 p | ~d 0xf50225
1 1 1 0 p | d 0xfa0089
1 1 1 1 1 0xff0062 raster_operaashon.uuhiit

sunn ou the nnor connon uses ou aa paternd bloc transphers uuil nouu bee considerd. too drauu aa blac rectangl, the pholouuing cohd nnaa bee ioosd.


too drauu aa uuhiit rectangl, the pholouuing cohd nnaa bee ioosd.


too culer inuert aa rectangl, the pholouuing cohd nnaa bee ioosd.


uuhen an aplicaashon corls the phuncshon phil_rectangl too phil aa rectangl uuith aa giuen brush, the operating sistenn perphornns paternd bloc tanspher too achieue the reesult. inuerting aa rectangl orlsoh is achieued throo aa paternd bloc tanspher.

standard and strech bit bloc transfers

aa stairndard bit bloc tanspher is achieued throo the phuncshon:


uuhairas aa rectangl ou bits nnaa bee strechd or contracted uiia the phuncshon:


thees phuncshons connbiin the destinaashon rectangl uuith the sors rectangl and the destinaashon brush. anee ou the auaalabl 256 raster operaashons nnaa bee ioosd. see eenioonneraashon raster_operaashon phor descripshons ou the 15 raster operaashons that hau naanns. the phurst ou thees phuncshons is the stairndard uuaa too copee aa bitnnap too aa displaa deuiis contecst. as preeueeuslee nnenshond, it is not posibl too copee aa bitnnap directlee too aa deuiis contecst. insted, aa nnennoree deuiis contecst is creeaated, the bitnnap is selected intoo that deuiis contecst and aa bit bloc tanspher is ioosd too copee the bitnnap too the target deuiis contecst - uuhair it is displaad. bit bloc transphers ar cuuicc and the cuuunspt is aa pouuerphul and general uuun. noht that bit bloc transphers perfornn culer conuershons uuhen reecuuiird. nnaping nnohd cohordinat conuershons ar orlsoh perphornned phor the uuidth and hiit ou the rectangls - uuich ar ecspresd in logical cohordinats phor both deuiis contecsts.