12 Primitivas de dibujo



Excepto _putpixel(), todas estas rutinas son afectadas por el modo actual de dibujo y el área de recorte del bitmap destino.

void putpixel(BITMAP *bmp, int x, int y, int color);
Escribe un pixel en la posición especificada del bitmap, usando el modo de dibujo actual y el área de recorte del bitmap.

void _putpixel(BITMAP *bmp, int x, int y, int color);
void _putpixel15(BITMAP *bmp, int x, int y, int color);
void _putpixel16(BITMAP *bmp, int x, int y, int color);
void _putpixel24(BITMAP *bmp, int x, int y, int color);
void _putpixel32(BITMAP *bmp, int x, int y, int color);
Como el putpixel() normal, pero mucho más rápidas porque están implementadas como funciones de ensamblador en línea para profundidades de color específicas. No funcionarán en modos gráficos de tipo Modo-X, no soportan áreas de recorte (íse bloquearán si intenta dibujar fuera del bitmap!), e ignoran el modo de dibujo.

int getpixel(BITMAP *bmp, int x, int y);
Lee el pixel del punto x, y en el bitmap. Devuelve -1 si el punto está fuera del bitmap.

int _getpixel(BITMAP *bmp, int x, int y);
int _getpixel15(BITMAP *bmp, int x, int y);
int _getpixel16(BITMAP *bmp, int x, int y);
int _getpixel24(BITMAP *bmp, int x, int y);
int _getpixel32(BITMAP *bmp, int x, int y);
Versiones más rápidas de getpixel() para profundidades de color específicas. No funcionarán en modo-X y no soportan áreas de recorte, así que debe estar seguro que el punto está dentro del bitmap.

void vline(BITMAP *bmp, int x, int y1, int y2, int color);
Dibuja una línea vertical en el bitmap, desde (x, y1) hasta (x, y2).

void hline(BITMAP *bmp, int x1, int y, int x2, int color);
Dibuja una línea horizontal en el bitmap, desde (x1, y) hasta (x2, y).

void do_line(BITMAP *bmp, int x1, y1, x2, y2, int d, void (*proc)());
Calcula todos los puntos de una línea desde el punto (x1, y1) hasta (x2, y2), llamando la función proc para cada pixel. A ésta función se le pasa una copia del parámetro bmp, la posición x e y, y el parámetro d, por lo que puede llamar la función putpixel().

void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
Dibuja una línea en el bitmap, desde (x1, y1) hasta (x2, y2).

void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color);
Dibuja un triángulo relleno entre los tres puntos.

void polygon(BITMAP *bmp, int vertices, int *points, int color);
Dibuja un polígono relleno con un número arbitrario de vértices. Pase el número de vértices y un array que contenga series de puntos x e y (hasta un total del valor vertices*2).

void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
Dibuja los bordes de un rectángulo con los dos puntos dados como esquinas opuestas.

void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
Dibuja un rectángulo sólido con los dos puntos dados como esquinas opuestas.

void do_circle(BITMAP *bmp, int x, int y, int radius, int d, void (*proc)());
Calcula todos los puntos de un círculo alrededor de (x, y) con el radio r, llamando a la función proc para cada pixel. A ésta función se le pasa una copia del parámetro bmp, la posición x e y, y el parámetro d, por lo que puede llamar la función putpixel().

void circle(BITMAP *bmp, int x, int y, int radius, int color);
Dibuja un círculo con el centro y radio especificados.

void circlefill(BITMAP *bmp, int x, int y, int radius, int color);
Dibuja un círculo relleno con el centro y radio especificados.

void do_ellipse(BITMAP *bmp, int x, y, int rx, ry, int d, void (*proc)());
Calcula todos los puntos de una elipse alrededor de (x, y) con el radio rx y ry, llamando a la función proc por cada pixel. A ésta función se le pasa una copia del parámetro bmp, la posición x e y, y el parámetro d, por lo que puede llamar la función putpixel().

void ellipse(BITMAP *bmp, int x, int y, int rx, int ry, int color);
Dibuja una elipse con el centro y radio especificados.

void ellipsefill(BITMAP *bmp, int cx, int cy, int rx, int ry, int color);
Dibuja una elipse rellena con el centro y radio especificados.

void do_arc(BITMAP *bmp, int x, y, fixed a1, a2, int r, d, void (*proc)());
Calcula todos los puntos en un arco circular alrededor del punto (x, y) con radio r, llamando a la función proc por cada uno de ellos. A ésta se le pasará una copia del parámetro bmp, la posición x e y, y una copia del parámetro d, por lo que puede usar putpixel(). El arco será pintado en sentido antihorario empezando desde el ángulo a1 y terminando en a2. Estos valores deben ser especificados en fromato de punto fijo 16.16, siendo 256 un círculo total, 64 un ángulo recto, etc. Cero comienza a la derecha del punto central, y valores mayores rotan en dirección antihoraria desde ahí.

void arc(BITMAP *bmp, int x, y, fixed ang1, ang2, int r, int color);
Dibuja un arco circular con centro radio r y centro x, y, en dirección antihoraria empezando desde el ángulo a1 y terminando en a2. Estos valores deben ser especificados en fromato de punto fijo 16.16, siendo 256 un círculo total, 64 un ángulo recto, etc. Cero comienza a la derecha del punto central, y valores mayores rotan en dirección antihoraria desde ahí.

void calc_spline(int points[8], int npts, int *x, int *y);
Calcula una serie de puntos npts a lo largo de una curva bezier, almacenándolos en los arrays x e y. La curva bezier es especificada por los cuatro puntos de control x/y del array points: points[0] y points[1] contienen las coordenadas del primer punto de control, points[2] y points[3] son el segundo punto de control, etc. Los puntos de control 0 y 3 son los extremos de la curva, y los puntos 1 y 2 son las guías. La curva probablemente no pasará por los puntos 1 y 2, pero estos afectan a la forma de la curva entre los puntos 0 y 3 (las líneas p0-p1 y p2-p3 son tangentes de la curva bezier). La forma más fácil de imaginárselo es pensar que la curva empieza en p0 en la dirección de p1, pero gira de tal forma que llega a p3 desde la dirección de p2. Además de su rol de primitivas gráficas, las curvas bezier pueden ser útiles para construir caminos alrededor de una serie de puntos de control, como en exspline.c.

void spline(BITMAP *bmp, int points[8], int color);
Dibuja una curva bezier usando los cuatro puntos de control especificados en el array points.

void floodfill(BITMAP *bmp, int x, int y, int color);
Rellena un área cerrada, comenzando en el punto (x, y), con el color especificado.




Volver al Indice