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.

Relacionado con: getpixel, _putpixel, drawing_mode.
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.
Relacionado con: putpixel.
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.
Relacionado con: putpixel, _getpixel.
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.
Relacionado con: getpixel.
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).
Relacionado con: hline, line, drawing_mode.
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).
Relacionado con: vline, line, drawing_mode.
void do_line(BITMAP *bmp, int x1, y1, x2, y2, int d, void (*proc)(BITMAP *bmp, int x, int y, int d));
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().
Relacionado con: do_circle, do_ellipse, do_arc, line.
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).
Relacionado con: hline, vline, do_line, drawing_mode.
void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color);
Dibuja un triángulo relleno entre los tres puntos.
Relacionado con: polygon, triangle3d, drawing_mode.
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).
Relacionado con: triangle, polygon3d, drawing_mode.
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.
Relacionado con: rectfill, drawing_mode.
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.
Relacionado con: rect, clear_bitmap, drawing_mode.
void do_circle(BITMAP *bmp, int x, int y, int radius, int d, void (*proc)(BITMAP *bmp, int x, int y, int d));
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().
Relacionado con: do_ellipse, do_arc, do_line, circle, circlefill.
void circle(BITMAP *bmp, int x, int y, int radius, int color);
Dibuja un círculo con el centro y radio especificados.
Relacionado con: ellipse, arc, circlefill, do_circle, drawing_mode.
void circlefill(BITMAP *bmp, int x, int y, int radius, int color);
Dibuja un círculo relleno con el centro y radio especificados.
Relacionado con: ellipsefill, circle, do_circle, drawing_mode.
void do_ellipse(BITMAP *bmp, int x, int y, int rx, ry, int d, void (*proc)(BITMAP *bmp, int x, int y, int d));
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().
Relacionado con: do_circle, do_arc, do_line, ellipse, ellipsefill.
void ellipse(BITMAP *bmp, int x, int y, int rx, int ry, int color);
Dibuja una elipse con el centro y radio especificados.
Relacionado con: circle, arc, ellipsefill, do_ellipse, drawing_mode.
void ellipsefill(BITMAP *bmp, int cx, int cy, int rx, int ry, int color);
Dibuja una elipse rellena con el centro y radio especificados.
Relacionado con: circlefill, ellipse, do_ellipse, drawing_mode.
void do_arc(BITMAP *bmp, int x, int y, fixed a1, fixed a2, int r, int d, void (*proc)(BITMAP *bmp, int x, int y, int d));
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í.
Relacionado con: do_circle, do_ellipse, do_line, arc.
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í.
Relacionado con: circle, ellipse, drawing_mode.
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.
Relacionado con: spline.
void spline(BITMAP *bmp, int points[8], int color);
Dibuja una curva bezier usando los cuatro puntos de control especificados en el array points.
Relacionado con: calc_spline, drawing_mode.
void floodfill(BITMAP *bmp, int x, int y, int color);
Rellena un área cerrada, comenzando en el punto (x, y), con el color especificado.
Relacionado con: drawing_mode.

Volver al Indice