Olisiko jollakin antaa neuvoa seuraavaan:
Haluan tehdä funktion, jonka avulla voisi vaalentaa tai tummentaa esim. PictureBox-kontrollille (VB6) ladattua kuvaa. Vaalennus tai tummennus on tarkoitus tehdä siten, että muutan piirtopinnan jokaisen pikselin RGB-arvoa tietyn verran.
Onnistuinkin tekemään kyseisen funktion näin: kävin silmukassa läpi piirtopinnan jokaisen pikselin ja otin pikselin arvon talteen GetPixel-funktiolla. Tämän jälkeen muutin tämän arvon RGB-muotoon ja muutin jokaista kolmea arvoa samassa suhteessa SetPixel-funktiolla, jolloin kuva vaaleni tai tummeni luonnollisella tavalla.
Funktio on kuitenkin niin hidas, ettei sitä oikein kannata käyttää missään.
Luin jostakin, että saman asian voisi tehdä nopeammin siten, että piirtopinnan pikselien arvot luetaan talteen Byte-taulukkoon, jossa pikselien arvoja voidaan manipuloida, ja asettaa muutetut pikselit takaisin piirtopinnalle. En kuitenkaan ole onnistunut löytämään sopivaa esimerkkikoodinpätkää mistään.
Olisiko jollakin parempaa tietoa asiasta?
Luet GetPixelillä talukkoon värit, muutat ne, ja blittaat pictureboxiin. Molemmat funktiot löytyvät muistaakseni APIsta.
Tarvittavat WinAPI-funktiot kuvadatan lukemiseen ovat GetDIBits ja SetDIBits. Voit myös käyttää vanhempia funktioita GetBitmapBits ja SetBitmapBits. Muita hyödyllisiä funktioita ovat GetDIBColorTable ja SetDIBColorTable, joita tarvitaan paletin muuttamiseen.
Kuvan värimäärästä riippuen värit ovat joko erillisessä paletissa tai suoraan kuvadatassa. 4- ja 8-bittisissä (eli 16- ja 256-värisissä) kuvissa on paletti, jossa oleviin väreihin viitataan kuvadatassa. 24-bittisissä kuvissa värit on tallennettu kuvadataan, ja jokainen pikseli vie tilaa kolme tavua. Palettia ei ole ollenkaan.
Sain tehtyä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.