#include "image.h"
#include "canal.h"
#include "grille.h"




void * CreeGrille(Image im, Zone zone)
/**************************************/

{
char **grille;
int x,y,i,ox,oy;

if (im==NULL) return(NULL);

if (zone==Z_FENETRE)
    {
    LitTailleFenetre(im, &x, &y);
    LitOrigineFenetre(im, &ox, &oy);
    }
else
    {
    x=im->taille.x;
    y=im->taille.y;
    ox=oy=0;
    }

switch(im->type)
    {
    case T_OCTET :
     if ( (grille=(char **)calloc(y,sizeof(Octet *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.octet[i+oy]+ox);
    break;

    case T_ENTIER :
     if ( (grille=(char **)calloc(y,sizeof(Entier *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.entier[i+oy]+ox);
    break;

    case T_ENTIERL :
     if ( (grille=(char **)calloc(y,sizeof(EntierL *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.entierL[i+oy]+ox);
    break;

    case T_REEL :
     if ( (grille=(char **)calloc(y,sizeof(Reel *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.reel[i+oy]+ox);
    break;

    case T_REELL :
     if ( (grille=(char **)calloc(y,sizeof(ReelL *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.reelL[i+oy]+ox);
    break;

    case T_COMPLEXE :
     if ( (grille=(char **)calloc(y,sizeof(Complexe *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.complexe[i+oy]+ox);
    break;

    case T_COMPLEXEL :
     if ( (grille=(char **)calloc(y,sizeof(ComplexeL *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.complexeL[i+oy]+ox);
    break;

    case T_COULEUR :
     if ( (grille=(char **)calloc(y,sizeof(Couleur *)))==NULL) return (NULL);
     for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.couleur[i+oy]+ox);
    break;

	 case T_VECTEUR2D :
	  if ( (grille=(char **)calloc(y,sizeof(Vecteur2D *)))==NULL) return (NULL);
	  for (i=0;i<y;i++) grille[i]=(char *) (im->donnee.vecteur2D[i+oy]+ox);
	 break;
	 }

return(grille);
}


void LibereGrille(void * grille)
/*******************************/

{
free(grille);
}

