Hlavnφ
Hlavnφ strana
Seznam Φlßnk∙
NejΦten∞jÜφ Φlßnky
Progres e-mailem
Visual C++ FAQ

Serißly
COM
ISAPI

banner2.gif (2546 bytes)

Nenechte si ujφt
NeobdΘlnφkovß okna
Tisk bez Preview
MFC a DLL
Logo v MDI ploÜe
Kouzla s kombo-boxem
V²jimky v C++

banner.gif (3305 bytes)

Pr∙hlednΘ bitmapy 2.dφl Jan Odvßrko
17.11.1999
[Hlavnφ strßnka]  |  [Rubrika]

2.1 RastrovΘ operace
Rastrovou operacφ rozumφme v²sledek kombinace bit∙ ze zdrojovΘ bitmapy, cφlovΘ bitmapy a aktußlnφho Üt∞tce (vzoru). Jak jsme se ji₧ dov∞d∞li v metodßch BitBlt a StretchBlt tuto operaci specifikuje parametr dwROP. Proto₧e bitmapy jsou tvo°eny maticφ bod∙, p°edstavujφ tyto operace logickΘ operace prßv∞ mezi t∞mito body. Pro nßsledujφcφ kapitoly platφ, ₧e bod s hodnotou 0 odpovφdß ΦernΘ barv∞ a bod s hodnotou 1 bφlΘ barv∞.

2.1.1 SRCOPY
Tato operace provßdφ p°φmΘ kopφrovßnφ zdrojovΘho kontext do cφlovΘho. Pou₧itφm tΘto operace m∙₧eme beze zm∞ny vytisknout bitmapu.

jo_131199_transparentbitmap1_obr5.gif (2404 bytes)

 

2.1.2 SRCAND
Tato operace kombinuje body zdrojovΘho a cφlovΘho kontext pomocφ logickΘ operace AND. Jak uvidφme pozd∞ji, pomocφ tΘto operace m∙₧eme vytisknout pouze ΦernΘ plochy zdrojovΘ bitmapy a ostatnφ budou v cφlovΘm kontextu ponechßny beze zm∞ny.

jo_131199_transparentbitmap1_obr6.gif (2407 bytes)

 

2.1.3 SRCPAINT
Pomocφ tΘto operace se body zdrojovΘ a cφlovΘ bitmapy kombinujφ pomocφ logickΘ operace OR. Podφvejme se op∞t na nßsledujφcφ obrßzek.

jo_131199_transparentbitmap1_obr7.gif (2337 bytes)

 

2.1.4 SRCINVERT
Tato rastrovß operace pou₧φvß pro kombinaci bit∙ jednotliv²ch bitmap logickou operaci XOR. Pokud je pou₧ita dvakrßt, uvede se vÜe do p∙vodnφho stavu. Jak uvidφme pozd∞ji, lze tuto operace takΘ v²hodn∞ pou₧φt pro transparentnφ tisk.

jo_131199_transparentbitmap1_obr8.gif (2398 bytes)

 

2.2 Transparentnφ tisk pomocφ masky
Na p°edchßzejφcφch p°φkladech je jasn∞ patrnΘ, jak fungujφ rastrovΘ operace a m∙₧eme je tedy pou₧φt k transparentnφmu kreslenφ bitmap. V prvnφm p°φklad∞ (z p°edchozφho dφlu), kter² jsme probφrali bylo jasnΘ, ₧e ΦervenΘ pozadφ nenφ urΦeno pro tisk a m∞lo by b²t p°i tΘto operaci vynechßno. N∞jak²m zp∙sobem musφme tedy definovat, ₧e Φervenß barva je pr∙hlednß a vÜechny body bitmapy, kterΘ jsou ΦervenΘ p°i tisku ignorovat (takov² bod pak naz²vßme transparentnφ). Tento problΘm se obvykle °eÜφ pomocφ masky.

2.3 Maska
Maska se sklßdß ze dvou Φßstφ, nepr∙hlednß Φßst (opaque), kterß je slo₧ena z Φern²ch bod∙ a pr∙hlednß Φßst (transparent), je₧ je slo₧ena z bφl²ch bod∙. V nepr∙hlednΘ Φßsti jsou body zdrojovΘ bitmapy zobrazeny a v pr∙hlednΘ nikoliv. Tφm je zajiÜt∞na definice pr∙hledn²ch a nepr∙hledn²ch Φßstφ jednΘ bitmapy. Jeliko₧ je maska v₧dy slo₧ena ze dvou barev (Φernß a bφlß), je ideßlnφ pou₧φt Φernobφlou (monochromatickou) bitmapu (m∙₧e vÜak b²t pou₧ita i barevnß).

2.4 Konverze Φernobφl²ch a barevn²ch bitmap
Pokud pro masky pou₧φvßme ΦernobφlΘ bitmapy, je d∙le₧itΘ v∞d∞t, jak²m algoritmem se p°evßd∞jφ ΦernobφlΘ bitmapy na barevnΘ a naopak. Pro tyto konverze je zßkladnφm ·dajem aktußlnφ barva textu (pop°edφ) a aktußlnφ barva pozadφ. Tyto barvy mohou b²t explicitn∞ nastaveny pomocφ metod SetTextColor (pop°edφ) a SetBkColor (pozadφ).

P°i p°evodu ΦernobφlΘ bitmapy na barevnou jsou vÜechny ΦernΘ bity (0) konvertovßny na barvu pop°edφ (text) a vÜechny bφlΘ bity na barvu pozadφ. Pokud tedy v kontextu nastavφme barvu textu na Φervenou, barvu pozadφ na zelenou a provedeme konverzi ΦernobφlΘ bitmapy bude v²sledek nßsledujφcφ (nejd°φve ukßzka zdrojovΘho k≤du).

  pDC->SetTextColor(RGB(25500));
  pDC->SetBkColor(RGB(02550));

jo_131199_transparentbitmap1_obr9.gif (1912 bytes)

P°i p°evodu barevnΘ bitmapy na Φernobφlou je postup podobn², vÜechny bity jejich₧ barva odpovφdß aktußlnφ barv∞ pozadφ jsou p°evedeny na bφlΘ a vÜechny ostatnφ bity jsou p°evedeny na ΦernΘ (barva textu nenφ v tomto p°φpad∞ pou₧ita).

Pro ·plnost dodejme, ₧e ke konverzi z ΦernobφlΘ bitmapy na barevnou dochßzφ tehdy, vlo₧φme-li tuto bitmapu do barevnΘho kontextu. Podobn∞ dochßzφ ke konverzi barevnΘ bitmapy,  vlo₧φme-li ji do ΦernobφlΘho kontextu.

2.5 Metoda pozitivnφ masky - True Mask Method
Prvnφ zp∙sob pr∙hlednΘho kreslenφ nevy₧aduje zm∞nu zdrojovΘ bitmapy. Tato vlastnost je mnohdy velice u₧iteΦnß, avÜak je vykoupenß jednou rastrovou operacφ navφc. P°epoklßdejme tedy existenci zdrojovΘ bitmapy a masky, kterß definuje pr∙hlednΘ (bφlß barva) a nepr∙hlednΘ (Φernß barva) Φßsti.

jo_131199_transparentbitmap1_obr10.gif (1600 bytes)

Nynφ si ukß₧eme zdrojov² k≤d, kter² pomocφ t°φ rastrov²ch operacφ vykreslφ bitmapu transparentn∞ (tzn. ΦervenΘ body budou ignorovßny). Ukßzka je maximßln∞ redukovßna, tak₧e nekontroluje chybovΘ nßvratovΘ hodnoty a nevracφ kontexty do p∙vodnφch stav∙. Ukßzka dßle p°epoklßdß, ₧e existujφ a jsou v po°ßdku nahrßny dv∞ bitmapy oSourceBmp a oMaskBmp, ₧e existuje inicializovan² ukazatel na cφlov² kontext pDC a prom∞nnΘ nWidth a nHeight, kterΘ obsahujφ rozm∞ry obou bitmap.

  CDC oSourceDC, oMaskDC;
  oSourceDC.CreateCompatibleDC(pDC);
  oMaskDC.CreateCompatibleDC(pDC);

  oSourceDC.SelectObject(&oSourceBmp);
  oMaskDC.SelectObject(&oMaskBmp);

  pDC->SetBkColor(RGB(255255255));
  pDC->SetTextColor(RGB(000));
  
  pDC->BitBlt(00, nWidth, nHeight, &oSourceDC, 00, SRCINVERT);
  pDC->BitBlt(00, nWidth, nHeight, &oMaskDC, 00, SRCAND);
  pDC->BitBlt(00, nWidth, nHeight, &oSourceDC, 00, SRCINVERT);

Prvnφ akcφ je vytvo°enφ kompatibilnφch kontext∙ za°φzenφ a vlo₧enφ odpovφdajφcφch bitmap do t∞chto kontext∙. DalÜφm krokem je nastavenφ barvy textu a pozadφ, kterΘ  zajiÜ¥uje sprßvnou konverzi ΦernobφlΘ masky. Toto nastavenφ je provedeno pouze "pro jistotu", proto₧e jsou to implicitnφ hodnoty kreslicφho kontextu. Poslednφ akcφ jsou t°i rastrovΘ operace, kterΘ zajiÜ¥ujφ transparentnφ kreslenφ.

.jo_131199_transparentbitmap1_obr11.gif (2859 bytes)

  • SRCINVERT
Provede XOR zdrojovΘ bitmapy do cφlovΘho kontextu.
  • SRCAND
Provede AND masky do cφlovΘho kontextu. VÜechny bφlΘ (pr∙hlednΘ) bity masky ponechajφ cφl beze zm∞ny, zatφmco nepr∙hlednΘ cφle jsou nastaveny na ΦernΘ.
  • SRCINVERT
Provede druh² XOR zdrojovΘ bitmapy do cφlovΘho kontextu, kter² vÜechny pr∙hlednΘ bity nastavφ do jejich p∙vodnφho stavu a nepr∙hlednΘ bity jsou p°φmo kopφrovßny. 

P°φÜt∞ metoda ΦernΘho zdroje...


PodobnΘ Φlßnky:

<<P°edchozφ
Pr∙hlednΘ bitmapy 1.dφl
╚lßnek je za°azen do serißlu Nßsledujφcφ>>
Pr∙hlednΘ bitmapy 3.dφl

Kdo Otßzka nebo p°ipomφnka

Prohlφ₧enφ p°φsp∞vk∙ nebo nov² p°φsp∞vek

O firm∞... Kontakt Ostatnφ