/// <summary> /// Rotation de l'image /// </summary> /// <param name="_image">Image à faire tourner</param> /// <returns></returns> public static MonImage Rotation(MonImage _image)//Don't work { MonImage image = new MonImage(_image, true); //On inverse la hauteur et la largeur de l'image //Donc on récupère les données byte[] largeur = new byte[] { _image.HeaderInfo[4], _image.HeaderInfo[5], _image.HeaderInfo[6], _image.HeaderInfo[7] }; byte[] hauteur = new byte[] { _image.HeaderInfo[8], _image.HeaderInfo[9], _image.HeaderInfo[10], _image.HeaderInfo[11] }; //On inverse aussi la résolution horizontale et verticale byte[] resolutionHorizontale = new byte[] { _image.HeaderInfo[24], _image.HeaderInfo[25], _image.HeaderInfo[26], _image.HeaderInfo[27] }; byte[] resolutionVerticale = new byte[] { _image.HeaderInfo[28], _image.HeaderInfo[29], _image.HeaderInfo[30], _image.HeaderInfo[31] }; //puis on les implémentee les données dans la nouvelle image for (int i = 0; i < 4; i++) { image.HeaderInfo[4 + i] = hauteur[i]; image.HeaderInfo[8 + i] = largeur[i]; image.HeaderInfo[24 + i] = resolutionHorizontale[i]; image.HeaderInfo[28 + i] = resolutionVerticale[i]; } image.Pixel = new byte[MonImage.EndianToInt(new byte[] { hauteur[0], hauteur[1], hauteur[2], hauteur[3] }), MonImage.EndianToInt(new byte[] { largeur[0], largeur[1], largeur[2], largeur[3] }), 3]; //On peut maintenant traiter l'image byte[,,] newPixels = new byte[image.Pixel.GetLength(1), image.Pixel.GetLength(0), 3]; for (int i = 0; i < newPixels.GetLength(0); i++) { for (int j = 0; j < newPixels.GetLength(1); j++) { for (int k = 0; k < 3; k++) { newPixels[i, j, k] = _image.Pixel[j, newPixels.GetLength(0) - i - 1, k]; } } } image.Pixel = newPixels; return(image); }
/// <summary> /// Redimensionner l'image selon une coefficient multiplicateur /// </summary> /// <param name="_image">Image à redimensionner</param> /// <param name="coefficient">Coefficient de redimentionnement</param> /// <returns></returns> public static MonImage Redimensionner(MonImage _image, double coefficient) { MonImage image = new MonImage(_image, true); //On redimensionne l'image dans le Header //On récupère la dimension initiale int hauteur = MonImage.EndianToInt(new byte[] { _image.HeaderInfo[4], _image.HeaderInfo[5], _image.HeaderInfo[6], _image.HeaderInfo[7] }); int largeur = MonImage.EndianToInt(new byte[] { _image.HeaderInfo[8], _image.HeaderInfo[9], _image.HeaderInfo[10], _image.HeaderInfo[11] }); //On multiplie par le coefficient demandé hauteur = (int)(hauteur * coefficient); largeur = (int)(largeur * coefficient); //On réajuste afin que la largeur soit un multiple de 4 largeur += (4 - (largeur % 4)) % 4; //On implemente les nouvelles dimensons dans le header byte[] Hauteur = MonImage.IntToEndian(hauteur); byte[] Largeur = MonImage.IntToEndian(largeur); for (int i = 0; i < 4; i++) { image.HeaderInfo[4 + i] = Hauteur[i]; image.HeaderInfo[8 + i] = Largeur[i]; } image.Pixel = new byte[hauteur, largeur, 3]; //On peut maintenant recréer l'image sous les nouvelles dimensions for (double i = 0; i < _image.Pixel.GetLength(0); i += 1 / coefficient) { for (double j = 0; j < _image.Pixel.GetLength(1); j += 1 / coefficient) { for (int k = 0; k < 3; k++) { image.Pixel[(int)(i * coefficient), (int)(j * coefficient), k] = _image.Pixel[(int)(i), (int)j, k]; } } } return(image); }