/* * Fichier expl_gd2_2.c * * Pour les explications de base, * se reporter à l'article sur gd. */ #include #include #include #include #define en_radians(ndeg) (M_PI*(ndeg)/180) #define min(a,b) ( (a) <= (b) ? (a) : (b) ) #define min4(a,b,c,d) ( min ( (a) , min( (b), min( (c) , (d) ) ) ) // Deux macros qui simplifient la vie #define brect_largeur (brect[4]-brect[0]) #define brect_hauteur (brect[1]-brect[5]) int main(void) { gdImagePtr image; FILE *image_png; char *err; int rouge, blanc, jaune, noir; char *chaine = "santé"; // La chaîne à écrire char *font = "/home/xavier/Docs/contribs_lea/c4/comic.ttf"; double taille = 20; // La taille de la police int brect[8]; // Les coordonnées du rectangle entourant le texte entier. gdPoint brect_points[4]; // Le tableau de points pour tracer le polygone image = gdImageCreate(100, 100); blanc = gdImageColorAllocate(image, 255, 255, 255); rouge = gdImageColorAllocate(image, 255, 0, 0); jaune = gdImageColorAllocate(image, 255, 255, 0); noir = gdImageColorAllocate(image, 0, 0, 0); gdImageFilledRectangle(image, 20, 40, 80, 60, rouge); gdImageFilledRectangle(image, 40, 20, 60, 80, rouge); /* Les nouveautés commencent ici */ err = gdImageStringFT (NULL, brect, jaune, font, taille, en_radians(45), 0, 0, chaine); brect_points[0].x = brect[0]+50-(brect_largeur-brect[0])/2; brect_points[0].y = brect[1]+50+(brect_hauteur-brect[1])/2; brect_points[1].x = brect[2]+50-(brect_largeur-brect[0])/2; brect_points[1].y = brect[3]+50+(brect_hauteur-brect[1])/2; brect_points[2].x = brect[4]+50-(brect_largeur-brect[0])/2; brect_points[2].y = brect[5]+50+(brect_hauteur-brect[1])/2; brect_points[3].x = brect[6]+50-(brect_largeur-brect[0])/2; brect_points[3].y = brect[7]+50+(brect_hauteur-brect[1])/2; gdImagePolygon (image, brect_points, 4, noir); err = gdImageStringFT (image, brect, jaune, font, taille, en_radians(45), 50-(brect_largeur-brect[0])/2, 50+(brect_hauteur-brect[1])/2, chaine); if (err) fprintf(stderr, "%s\n", err); /* Les nouveautés s'arrêtent ici */ image_png = fopen("expl2.png", "w"); gdImagePng(image, image_png); fclose(image_png); gdImageDestroy(image); exit (0); }