You are on page 1of 3

////////////////////////////////////////////////////////////////////////

// ARCHIVO : ClsPunto.h
// AUTOR : Ruben A. Calabuig.
// VERSI�N : 1.0 Estable.
// FECHA : 21/08/2008.
// LICENCIA : GPL (General Public License).
//......................................................................
// IDE : Code::Blocks.
// COMPILADOR: GNU GCC Compiler (Mingway).
//......................................................................
// DESCRIPCION:
// Este archivo incluye la definicion de la clase
// "ClsPunto" perteneciente al sistema "RDMCS++" (Direct
// Media Class System) para C++.
//
// ClsPunto contiene dos funciones miembros (dibujar y leer)
// que dibujan y leen pixeles desde supeficies respectiva-
// mente en el modo grafico.
//
// NOTA: Esta clase utiliza las librerias SDL
// (Simple DirectMedia Layer) de Sam Lantinga.
//
// Las SDL se distribuyen con licencia LGPL y tienen
// la ventaja de ser multiplataforma.
//
////////////////////////////////////////////////////////////////////////
#ifndef _CLSPUNTO_H
#define _CLSPUNTO_H

//**********************************************************************
// DEFINICION DE LA CLASE
//======================================================================
class ClsPunto
{
//---------
// METODOS
//---------
public:
//-----------
// DE ACCION
//-----------
// Dibuja un punto de color en una supeficie dada.
void dibujar(int x, int y, colorRGB, SDL_Surface*);

// Lee un punto desde una superficie dada.


SDL_Color leer(int x, int y, SDL_Surface*);
};

//**********************************************************************
// DEFINICION DE LOS METODOS
//======================================================================
// METODO : void dibujar (int x,
// int y,
// colorRGB color,
// SDL_Surface* sup
// )
// ACCION : Dibuja un punto de color en las coordenadas x e y de una
// superficie dada.
// PARAMETROS: int x -> coordenada x.
// int y -> coordenada y.
// colorRGB color -> color del punto.
// SDL_Surface* sup -> superficie donde se dibujara el punto.
// DEVUELVE : NADA.
//----------------------------------------------------------------------
void ClsPunto::dibujar(int x, int y, colorRGB color, SDL_Surface* sup)
{
// Convertimos color
Uint32 col=SDL_MapRGB(sup->format, color.r, color.g, color.b);

// Determinamos posici�n de inicio


char *buffer=(char*) sup->pixels;

// Calculamos offset para y


buffer+=sup->pitch*y;

// Calculamos offset para x


buffer+=sup->format->BytesPerPixel*x;

// Copiamos el pixel
memcpy(buffer, &col, sup->format->BytesPerPixel);
}

//======================================================================
// METODO : SDL_Color leer(int x,
// int y,
// SDL_Surface* sup
// )
// ACCION : Retorna el color de un pixel que se encuentra en las coor-
// denadas x e y de una superficie dada.
// PARAMETROS: int x -> coordenada x.
// int y -> coordenada y.
// SDL_Surface* sup -> superficie donde se leera el punto.
// DEVUELVE : SDL_Color -> componentes RGB del pixel.
//----------------------------------------------------------------------
SDL_Color ClsPunto::leer(int x, int y,SDL_Surface* sup)
{
SDL_Color color;
Uint32 col;

// Determinamos posici�n de inicio


char *buffer=(char *) sup->pixels;

// Calculamos offset para y


buffer+=sup->pitch*y;

// Calculamos offset para x


buffer+=sup->format->BytesPerPixel*x;

// Obtenemos el pixel
memcpy(&col, buffer, sup->format->BytesPerPixel);

// Descomponemos el color
SDL_GetRGB(col, sup->format, &color.r, &color.g, &color.b);

// Devolvemos el color
return color;
}

//*********************************************************************
#endif // _CLSPUNTO_H
///// FIN DE ARCHIVO //////////////////////////////////////////////////

You might also like