コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }