SDL getpixel

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

SDL getpixel

Notapor maije » Mar Abr 01, 2008 1:08 pm

hopa a tod@s. directamente pego mi codigo, que es super cortito y pego el error que me da el visual c++ express 2005

Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_image.h>

int main(int argc, char *argv[]) {
   
   SDL_Surface* imagen;
   Uint32 key;

   imagen = SDL_LoadBMP( "dibujo.bmp" );
   key = getpixel( imagen, 0, imagen->h - 1 );

   printf("el pixel tiene codigo %d", key);

   _sleep(1000);

   return 0;

}


he añadido en las opciones de proyecto las carpetas include y a la carpeta de archivos de recursos las .lib ademas de copiar las .dll a la carpeta principal del juego, pero sigue sin encontrarme la funcion getpixel..
me dice esto:

error C3861: 'getpixel': no se encontró el identificador

si alguien puede iluminarme....he copiado el codigo de esta misma web

http://www.losersjuegos.com.ar/foro/viewtopic.php?p=265&sid=cf49ee64f8c4a098b437dffb5d6989bd

muchas gracias por adelantado
atentamente
maije
maije
 
Mensajes: 20
Registrado: Lun Dic 17, 2007 6:20 pm

Notapor Alex_13_estu » Mar Abr 01, 2008 9:52 pm

¡Hola! Acabo de ver tu mensaje y, aunque creo que no soy el más indicado para responderte ésto porque no soy ningún experto con ciertas funciones de SDL (por ejemplo, la de obtener el color del pixel), tengo una ligera idea de dónde puede estar el error. SImplemente tiene un fallo: la función getpixel() no existe en SDL. ¡Sí, es así de simple! Si te fijas, en el mismo post que pones en tu link, más abajo definen una función que es la siguiente (la copio tal como está):

Código: Seleccionar todo
// Nota, código obtenido del wiki de SDL
// http://www.libsdl.org/cgi/docwiki.cgi/Pixel_20Access
Uint32 getpixel(SDL_Surface *surface, int x, int y)
{
    int bpp = surface->format->BytesPerPixel;
    /* Here p is the address to the pixel we want to retrieve */
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

    switch(bpp) {
    case 1:
        return *p;

    case 2:
        return *(Uint16 *)p;

    case 3:
        if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
            return p[0] << 16 | p[1] << 8 | p[2];
        else
            return p[0] | p[1] << 8 | p[2] << 16;

    case 4:
        return *(Uint32 *)p;

    default:
        return 0;       /* shouldn't happen, but avoids warnings */
    }
}


Simplemente coloca ésta función antes de main() (o después pero recuerda poner entonces el prototipo si usas C++) y ya tendrás el problema solucionado. El programa generará el archivo "stdout.txt" correspondiente y te dará el color del píxel (no me preguntes cómo interpretarlo ni nada por el estilo porque ya te dije que no tenía ni idea). Espero haberme explicado bien (aunque no era muy difícil) y ojalá que te haya solucionado el problema.

Un saludo.
Alex_13_estu
 
Mensajes: 75
Registrado: Jue Mar 27, 2008 5:22 pm

Notapor maije » Mar Abr 01, 2008 11:39 pm

muchisimas gracias, la solucion era tan simple que me siento un tanto ridiculo :-). pense que solo la ponian como para que la gente viera como estaba construida la funcion, no porque no estuviera incluida, cosa que por otro lado no entiendo, en la libreria de imagen estandar de SDL, que creo que deberia de ser su sitio.

muchas gracias por todo y por responder ;) aunque no seas un "experto" :D

atentamente
maije
maije
 
Mensajes: 20
Registrado: Lun Dic 17, 2007 6:20 pm


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron