Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/08/2010, 21:53
davidtadeo
 
Fecha de Ingreso: agosto-2010
Mensajes: 153
Antigüedad: 14 años, 3 meses
Puntos: 1
Problema en SDL

Hola, compilen este programa haber si les funciona, es que a mi me aparece este error:

10 E:\Documents and Settings\Administrador\Escritorio\main.c syntax error before '*' token

y este es el programa:

Código C:
Ver original
  1. #ifndef _PIXELS_H_
  2. #define _PIXELS_H_
  3.  
  4.  
  5. enum colores {R, G, B};
  6.  
  7. // Esta función sustituye el color del píxel (x, y) de la superficie
  8. // surface por el color que recibe en el parámtro pixel
  9.  
  10. void PutPixel(SDL_Surface *superficie, int x, int y, Uint32 pixel);
  11.  
  12.  
  13. // Esta función devuelve el color del píxel de la
  14. // posición (x, y) de la superficie
  15.  
  16. Uint32 GetPixel(SDL_Surface *superficie, int x, int y);
  17.  
  18. #endif
  19.  
  20. #include <SDL/SDL.h>
  21. #include "pixels.h"
  22.  
  23.  
  24. void PutPixel(SDL_Surface *superficie, int x, int y, Uint32 pixel) {
  25.  
  26.  // Obtenemos la profundida de color
  27.  
  28.  int bpp = superficie->format->BytesPerPixel;
  29.  
  30.  
  31.  // Obtenemos la posición del píxel a sustituir
  32.  
  33.  Uint8 *p = (Uint8 *)superficie->pixels + y * superficie->pitch + x*bpp;
  34.  
  35.  
  36.  // Según sea la profundidad de color
  37.  
  38.  switch (bpp) {
  39.  
  40.  case 1: // 8 bits (256 colores)
  41.  
  42.  *p = pixel;
  43. break;
  44.  
  45.  case 2: // 16 bits (65536 colores o HigColor)
  46.  *(Uint16 *)p = pixel;
  47.  break;
  48.  
  49.  case 3: // 24 bits (True Color)
  50.  
  51.  // Depende de la naturaleza del sistema
  52.  // Puede ser Big Endian o Little Endian
  53.  
  54.  if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
  55.  
  56.  // Calculamos cada una de las componentes de color
  57.  // 3 bytes, 3 posiciones
  58.  
  59.  p[R]=(pixel >> 16) & 0xFF;
  60.  p[G]=(pixel >> 8) & 0xFF;
  61.  p[B]=pixel & 0xFF;
  62.  }
  63.  else {
  64.  
  65.  // Calculamos cada una de las componentes de color
  66.  // 3 byes, 3 posiciones
  67.  
  68.  p[R]=pixel & 0xFF;
  69.  p[G]=(pixel >> 8) & 0xFF;
  70.  p[B]=(pixel >> 16) & 0xFF;
  71.  
  72.  }
  73.  break;
  74.  
  75.  case 4: // 32 bits (True Color + Alpha)
  76.  
  77.  *(Uint32 *) p = pixel;
  78.  break;
  79.  }
  80. }
  81.  
  82.  
  83.  
  84.  
  85. Uint32 GetPixel(SDL_Surface *superficie, int x, int y) {
  86.  
  87.  // Obtenemos la profunidad de color
  88.  
  89.  int bpp = superficie->format->BytesPerPixel;
  90.  
  91.  
  92.  // Obtenemos la posición del píxel a consultar
  93.  
  94.  Uint8 *p = (Uint8 *)superficie->pixels + \
  95.  y * superficie->pitch + x * bpp;
  96. // Según sea la profundidad de color
  97.  
  98.  switch (bpp) {
  99.  
  100.  case 1: // 256 colores
  101.  
  102.  return *p;
  103.  case 2: // 65536 colores
  104.  
  105.  return *(Uint16 *)p;
  106.  
  107. case 3: // True Color
  108.  
  109.  // Según la naturaleza del sistema
  110.  
  111.  if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
  112.  
  113.  // OR entre los distintos componentes del color
  114.  
  115.  return p[R] << 16 | p[G] << 8 | p[B];
  116.  
  117.  else
  118.  
  119.  // OR entre los distintos componentes del color
  120.  
  121.  return p[R] | p[G] << 8 | p[B] << 16;
  122.  
  123.  case 4: // True Color + Alpha
  124.  
  125.  return *(Uint32 *)p;
  126.  
  127.  default:
  128.  
  129.  return 0;
  130.  }
  131. }