[c#] Inverser (retourner) une image jPG

Résolu/Fermé
koralle Messages postés 4 Date d'inscription jeudi 23 novembre 2006 Statut Membre Dernière intervention 24 avril 2007 - 23 nov. 2006 à 12:59
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 23 nov. 2006 à 20:48
Bonjour,

Je suis pas très douée et j'ai un exam bientot
Pouvez vous me donner le code ou une partie du code qui permettrait d'inverser ou retourner une image (photo) comme le Windows !
S'y possible pixel par pixel !
Merci d'avance de votre aide

a+
Kora,lle
A voir également:

1 réponse

mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
23 nov. 2006 à 20:48
extern "C"{
  #include <stdlib.h>
}
#include <cassert>
#include <iostream>

class image_t{
  protected:
  typdef unsigned int pixel_t;
  pixel_t **data; // les valeurs des pixels
  std::size_t largeur; // la largeur de l'image en nb de pixel
  std::size_t hauteur; // la hauteur de l'image en nb de pixel

  public:

  // Constructeur par défaut
  image(){}

  // Constructeur
  image(std::size_t hauteur0,std::size_t largeur0):
    hauteur(hauteur0),largeur(largeur0)
  {
    data = (pixel_t **)malloc(hauteur*sizeof(pixel_t *));
    for(std::size_t i=0;i<hauteur;++i)
      data[i] = (pixel_t *)calloc(hauteur,sizeof(pixel_t));
  }  

  // Destructeur
  ~image(){
    for(std::size_t i=0;i<hauteur;++i) free(data[i]);
    free(data);
  }

  // Accesseur hauteur
  inline std::size_t get_hauteur() const{
    return hauteur;
  }

  // Accesseur largeur
  inline std::size_t get_largeur() const{
    return largeur;
  }

  // Accesseur pixel
  inline pixel_t get_pixel(std::size_t ligne,std::size_t colonne) const{
    assert(ligne<hauteur);
    assert(colonne<largeur);
    return pixel[i][j];
  }

  // Accesseur pixel
  inline void set_pixel(std::size_t ligne,std::size_t colonne,const pixel_t & p){
    assert(ligne<hauteur);
    assert(colonne<largeur);
    pixel[i][j] = p;
  }

  // Renversement horizontal
  inline image_t retournement_horizontal() const{
    image_t img(hauteur,largeur);
    for(std::size_t i=0;i<hauteur;++i){
      for(std::size_t j=0;j<largeur;++j){
        img.set_pixel(i,largeur-j,this->get_pixel(i,j));
      }
    }
    return img;
  }

  // Renversement vertical
  inline image_t retournement_horizontal() const{
    image_t img(hauteur,largeur);
    for(std::size_t i=0;i<hauteur;++i){
      for(std::size_t j=0;j<largeur;++j){
        img.set_pixel(hauteur-i,j,this->get_pixel(i,j));
      }
    }
    return img;
  }

  // Rotation +90°
  inline image_t retournement_horizontal() const{
    image_t img(largeur,hauteur);
    for(std::size_t i=0;i<hauteur;++i){
      for(std::size_t j=0;j<largeur;++j){
        img.set_pixel(j,i,this->get_pixel(i,j));
      }
    }
    return img;
  }
};

// Operateur d'affichage
template <typename Tstream>
Tstream operator << (Tstream & out,const image_t & img){
  std::size_t largeur = img.get_largeur();
  std::size_t hauteur = img.get_hauteur();
  for(std::size_t i=0;i<hauteur;++i){
    for(std::size_t j=0;j<largeur;++j){
      out << img.get_pixel(i,j);
    }
    out << std::endl;
  }
  return out;  
}

int main(){
  image_t img(5,4);
  img.set_pixel(0,0,1);
  img.set_pixel(1,2,5);
  img.set_pixel(2,1,4);
  img.set_pixel(3,3,6);
  std::cout << img << std::endl;
  image_t img2 = img.retournement_horizontal();
  std::cout << img2 << std::endl;
  getchar(); // pour les windowsiens
  return 0;
}

Enfin c'est un truc dans l'idée... Enfin je te laisse chercher
0