kun erotan SDL_Surfacen pisteestä x värejä seuraavalla tavalla:
r=(color/(256*256))%256; g=(color/256)%256; b=color/%256;
ja piirrän samaan kohtaan,samalle SDL_Surfacelle samaa väriä:
((unsigned int*)surface->pixels)[x]=r*256*256+g*256+b;
saan pelkkää mustaa (värin ei pitäisi olla sitä). Joissain tapauksissa, kun muokkaan väriarvoja, pisteeseen x tulee väriä, mutta aivan vääränlaista. Alpha-arvot saattavat olla käytössä...Miten saan oikean värin kohtaan x?
Erota ja aseta takaisin ne alfatkin (samaan kaavaan yksi 256 lisää) tai aseta piirtäessä tuonne vielä | 0xff000000
, jos haluat vain täysin läpinäkymätöntä.
Näyttää toimivan. Mutta entä jos haluan muuttaa arvoja? Jos haluan esimerkiksi kertoa tai jakaa jonkin värin määrän? Tai lisätä tai vähentää sitä?
nopeampi:
r = color >> 16; g = (color >> 8) & 255; b = color & 255;
jos alphat käytössä niin jotenkin tyyliin
r = (color >> 16) & 255; g = (color >> 8) & 255; b = color & 255;
Ongelma ratkesi SDL_GetRGBA:lla ja SDL_MapRGBA:lla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.