A simple, low level, drawing library in C.
The aim of this library is to provide basic drawing feature while remaining simple and easy to use.
- Read PNG and PPM image files
- Save in PNG, PPM, JPEG or TIFF format
- Support transparency (alpha channel)
- Image superposition, like using calcs
- Draw lines and polygons
- Fill polygons
- Draw circles
- Draw filled circles
- Write text
Some extern libraries are optionally used :
- libz and libpng-1.6 for png reading and writing
- libjpeg for jpeg writing
- libtiff for tiff writing
The static library file yImage.a will be generated by make.
Various build options are available based on the formats you need to support.
The default build support only PNG and need libpng and libz to be installed in your system. If the headers files of these library
are not in the standard path /usr/local/include, you have to edit the Makefile and change the value of
constant INCLUDEPNG to fit the correct path.
Then, simply do :
$ makeYou may don't need PNG support, and so want to build without libpng. In that case, the build command will be :
$ HAVE_PNG=no makeUse
$ HAVE_JPEG=yes makeor
$ HAVE_TIFF=yes makeTo add JPEG or TIFF support.
To install libyImage in /usr/local/lib and the headers files in /usr/local/include :
$ make installGenerate the API documentation needs doxygen (and graphviz for the graphs). Process by typing :
$ make docThen, open the file doc/html/index.html in a web browser.
The images are represented as simple raster in the yImage struct :
typedef struct {
unsigned char *rgbData; /* data table : RGBRGBRGB... */
unsigned char *alphaChanel; /* array of alpha (8bits) values */
int rgbWidth, rgbHeight; /* image's width and height */
int presShapeColor; /* indicate if shape_color is use or not */
/* available if alpha_chanel == NULL and presShapeColor != 0 */
yColor shapeColor; /* this color is for transparent pixels */
} yImage;Here is a program png2ppm.c to convert a PNG file to the PPM binary format :
#include "yImage.h"
#include "yImage_io.h"
int main(int argc, char**argv) {
yImage *im;
if(argc < 2) {
return 1;
}
im = y_load_png(argv[1]);
if(im == NULL) {
return 2;
}
y_save_ppm(im, "out.ppm");
y_destroy_image(im);
return 0;
}Compile this program with command :
$ gcc -o png2ppm png2ppm.c -lyImage -lpng -lz -ljpeg -ltiffThe programme hello.c create an image with text "Hello World!".
#include "yImage.h"
#include "yColor.h"
#include "yText.h"
#include "yImage_io.h"
#include <stdlib.h>
#define WIDTH 300
#define HEIGHT 50
int main(int argc, char **argv) {
int err;
yImage *image;
yColor *back;
back = y_color(WHITE);
image = y_create_uniform_image(&err, back, WIDTH, HEIGHT);
free(back);
if(err) {
fprintf(stderr, "Error %d creating image\n", err);
return err;
}
y_display_text(image, 100, 17, "Hello World!");
y_save_png(image, "hello.png");
y_destroy_image(image);
return 0;
}Compile this program with command :
$ gcc -o hello hello.c -lyImage -lpng -lz -ljpeg -ltiffThis program, named fillPol, draw a yellow square centered on a red window.
#include "yImage.h"
#include "yImage_io.h"
#include "yColor.h"
#include "yDraw.h"
#include <stdlib.h>
#define WIDTH 300
#define HEIGHT 300
int main(int argc, char **argv) {
int err;
yImage *image;
yColor *back, *fore;
yPoint polygon[4];
back = y_color(RED);
image = y_create_uniform_image(&err, back, WIDTH, HEIGHT);
free(back);
if(err) {
fprintf(stderr, "Error %d creating image\n", err);
return err;
}
// Define polygon
polygon[0].X = 50;
polygon[0].Y = 50;
polygon[1].X = 250;
polygon[1].Y = 50;
polygon[2].X = 250;
polygon[2].Y = 250;
polygon[3].X = 50;
polygon[3].Y = 250;
fore = y_color(YELLOW);
y_fill_polygon(image,*fore,polygon,4);
free(fore);
y_save_png(image, "fillPol.png");
y_destroy_image(image);
return 0;
}Compile this program with command :
$ gcc -o fillPol fillPol.c -DHAVE_LIBPNG -lyImage -lpng -lz