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.
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>)
Aihe on jo aika vanha, joten et voi enää vastata siihen.