Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Pikselin rgb-arvon otto int(e)iksi SDL_Surfacesta

Kray [07.06.2007 11:21:23]

#

Eli miten voi ottaa SDL_Surfacesta yhden pikselin rgb arvon int-muuttujaan tai muuttajiin?

osku91 [07.06.2007 11:30:25]

#

https://www.ohjelmointiputka.net/keskustelu/14574-tasohyppelypeli

Metabolix [07.06.2007 12:10:53]

#

void SDL_GetPixel(int x, int y, SDLSurface *s, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)
{
    Uint8 v[4];
    Uint32 c = *(Uint32*)((char*)s->pixels + y * s->pitch + x * s->format->BytesPerPixel) & (0xffffffffUL >> (32 - s->format->BitsPerPixel));
    SDL_GetRGBA(c, s->format, v, v+1, v+2, v+3);
    if (r) *r = v[0];
    if (g) *g = v[1];
    if (b) *b = v[2];
    if (a) *a = v[3];
}

Jos tiedät valmiiksi pinnan värisyvyyden, voit optimoida tuosta bittisiirtokikkailun pois, ja jos tiedät myös värien järjestyksen, joka on Windowsissa usein 32-bittisellä pinnalla 0xAARRGGBB ellei muuta ole määritelty, voit tehdä koko funktion paljon lyhyemmin ilman SDL_GetRGBA-kutsua.

Kray [08.06.2007 08:14:15]

#

Öh... miten tuota funktiota siis kuuluu käyttää, kun mitä syötetään sitä kutsuessa noihin neljään viimeiseen kohtaan. Kokeilin NULLIA, ja ei tuntunut toimivan. Eikä auttanut laitta locksurfacea, vaan heittää pihalle. Kerran meni Dev-cpp:kin sekaisin...

Blaze [08.06.2007 09:57:49]

#

kray kirjoitti:

Öh... miten tuota funktiota siis kuuluu käyttää, kun mitä syötetään sitä kutsuessa noihin neljään viimeiseen kohtaan.

Pointteri siihen surfaasiin, josta pikseli luetaan, ja kolme int-pointteria, johon se tulos varastoidaan.

Metabolix [08.06.2007 12:43:07]

#

kray kirjoitti:

Öh... miten tuota funktiota siis kuuluu käyttää, kun mitä syötetään sitä kutsuessa noihin neljään viimeiseen kohtaan.

Osoittimet Uint8-tyyppisiin muuttujiin, joihin laitetaan eri värien arvot. Miten oikein kuvittelit sen värin saavasi, jos laitat NULL niihin? :D Ja näkeehän tuon niiden nimistäkin, rgba.

Vastaus

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

Tietoa sivustosta