/*
 * Fichier expl_gd2_3.c
 *
 * Pour les explications de base,
 * se reporter à l'article sur gd.
 */
#include <stdlib.h>
#include <gd.h>

int main(void) {
  FILE *image_png;
  gdImagePtr image, image_d_avant;
  int orange, bleu;

  // On crée une image TrueColor
  image = gdImageCreateTrueColor(100, 100);
  // On alloue une couleur
  orange = gdTrueColor (255, 128, 0);
  // On trace un rectangleorange
  gdImageFilledRectangle(image, 0, 0, 100, 100, orange);

  // On ouvre l'image du premier exercice et on en crée une image
  image_png = fopen("expl1.png", "r");
  image_d_avant = gdImageCreateFromPng (image_png);
  fclose (image_png);

  // on copie avec remise à l'échelle de 100x100 pixels en partant de (0,0) de l'ancienne image
  // on place le résultat de taille 90x90 à (5,5) dans la nouvelle
  gdImageCopyResampled(image, image_d_avant, 5, 5, 0, 0, 90, 90, 100, 100);
  // on détruit l'ancienne image en mémoire.
  gdImageDestroy (image_d_avant);

  // On alloue une couleur bleue semi transparente
  bleu = gdTrueColorAlpha(0, 0, 255, gdAlphaTransparent / 2);
  // on se met en mode écrasement
  // La où on dessinera il y aura du bleu semi-transparent, c'est tout
  gdImageAlphaBlending(image, 0);
  // ontrca eun rectangle
  gdImageFilledRectangle(image, 10, 10, 90, 30, bleu);

  // On se met en mode "mélange"
  // Ce qu'on dessine, se mélange avec ce qu'il y a dessous
  // 50% de bleu et 50% du dessous
  gdImageAlphaBlending(image, 1);
  gdImageFilledRectangle(image, 40, 10, 90, 90, bleu);

  image_png = fopen("expl3.png", "w");
  gdImagePng(image, image_png);
  fclose(image_png);

  gdImageDestroy(image);

  exit (0);
}