Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Bittikartan vaalennus Win32 API:lla

PetteriH [16.02.2005 11:42:02]

#

Olisiko jollakin antaa neuvoa tai lyhyttä koodinpätkää bittikartan vaalennukseen Windowsin API-funktioilla?

Kokeilin eilen illalla asiaa, mutta onnistumatta. Ilmeisesti tarvitaan ainakin SetDIBits ja GetDIBits funktioita. GetDIBits palauttaa bittikartan pikselit BYTE-taulukkona. Taulukon jokaista pikselin arvoa on mahdollista muuttaa silmukassa, jonka jälkeen muutetut pikselit voidaan liittää takaisin piirtopinnan bittikartalle SetDIBits-funktiolla.

Periaatteessa tiedän, miten asia pitäisi tehdä, mutta käytännössä se ei ainakaan eilen onnistunut.

SetPixel ja GetPixel funktioilla tämä olisi tietenkin helpointa tehdä, mutta tämä tapa on minulle liian hidas.

Metabolix [16.02.2005 19:22:03]

#

Yksi konsti on tehdä yhden pikselin kokoinen valkoinen "kuva" ja laittaa se bitmapin päälle AlphaBlend-funktiolla (vai mikä se nyt onkaan).

Jos saat bitmapin luettua GetDIBits-funktiolla, muista varmistaa, ettei yksittäisen tavun arvo pyörähdä ympäri eli nouse yli 255:n (256 muuttuu taas 0:ksi). Vaikkapa näin:

// "tavu" on taulukon käsiteltävä kohta, oletettavasti unsigned char (tai BYTE)
unsigned char luku; // Apumuuttuja, samaa tyyppiä kuin "tavu"
luku = tavu; // alkuarvo talteen
tavu = tavu * 2 // Mitä nyt tavulle teetkään...
// Jos tavu on pienempi kuin alussa, se on pyörähtänyt ympäri
if (tavu < luku) tavu = 255;

Voi olla nopeampaa kopioida koko GetDIBitsin palauttama taulukko kerralla talteen ja verrata aina siihen. (ks. funktio memcpy, #include <string.h>)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta