begin process at 2012 02 08 10:04:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

Resize image [Urgent !]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Resize image [Urgent !]

samedi 6 décembre 2008 à 04:24:44 | Resize image [Urgent !]

The Red Man

Bonjour,

Est-ce que vous avez une idée de l'algo (enfin le code :D) en C qui donnerait la possibilité de réduire ou agrandir une image !

Merci !
samedi 6 décembre 2008 à 10:56:43 | Re : Resize image [Urgent !]

buno

Administrateur CodeS-SourceS
Yep, bien sûr:
Réduction = moyenne des pixels voisins
Agrandissement = interpolation
Jettes un oeil sur ma source

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
samedi 6 décembre 2008 à 12:25:27 | Re : Resize image [Urgent !]

The Red Man

Salut !

Sur ta source il n'y a pas de fonction pour modifier la taille de l'image. De plus avec un tableau à 2 dimensions c'est simple. Mais lorsque tu doit gérer un tableau à une dimension c'est un plus chaud par exemple lorsque tu veux agrandir sur la longueur et la hauteur.

voici la structure :

typdef struct Timage
{
  int w;
  int h;
  unsigned char * data;
} Timage;
samedi 6 décembre 2008 à 13:47:41 | Re : Resize image [Urgent !]

buno

Administrateur CodeS-SourceS
Sur ta source il n'y a pas de fonction pour modifier la taille de l'image
-> ah oups, sorry...Je me sens c** du coup

un tableau à une dimension c'est un plus chaud
-> bof. Si tu connais la hauteur et la largeur de ton image, aucun souci.
Au lieu d'accéder à un pixel comme ça:  bitmap[i][j], tu dois faire bitmap[i*largeur+j].
ça allonge l'écriture, certes, mais le traitement est le même

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
dimanche 7 décembre 2008 à 05:03:38 | Re : Resize image [Urgent !]

The Red Man

Je teste ça et je verrai !

Merci bien ;)
dimanche 7 décembre 2008 à 19:53:37 | Re : Resize image [Urgent !]

The Red Man

le truc c'est que lors de l'agrandissement de l'image, je fonctionne par coefficient d'agrandissement.
Exemple : coeffW = newWidth/oldWidth;
le problème c'est que le coeffW correspondra parfois à une valeur à virgule flottante donc pour l'interpolation des pixel reste difficile.

tu vois ce que je veux dire ou pas ? :D
lundi 8 décembre 2008 à 09:50:12 | Re : Resize image [Urgent !]

buno

Administrateur CodeS-SourceS
Hello,
Désolé, je ne vois pas ce que tu veux dire. Pourrais-tu être plus précis, s'il te plaît?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 8 décembre 2008 à 19:48:27 | Re : Resize image [Urgent !]

The Red Man

Réponse acceptée !
Avec un peu de recherche, Je me suis rendu compte que finalement je pouvais utiliser l'algèbre bilinéaire à la fois pour la modification de la résolution de l'image mais aussi pour des filtres.
mardi 16 décembre 2008 à 12:53:31 | Re : Resize image [Urgent !]

The Red Man

Voilà une fonction permettant de modifier la résolution d'une image :
/**
   * Resize jpg file
   *
   * @params
   *    Timage image - current image to edit
   *    int height - new height
   *    int width - new width
   */
int resize(Timage image, unsigned int height, unsigned int width)
{
    /* if the image is not exist  this function will return -1 as error value */
    if (image == NULL) return -1;
   
    /* on test si les les nouvelles dim. sont similaire au anciennes dim. */
    if (image->h == height && image->w == width) return 1;

    int x,y, * xarray;
    unsigned char  ** yarray, *ptr, *ptr2, *ptr22;
    unsigned char * new_data = (unsigned char *)malloc(height * width * 3 * sizeof(unsigned char *));
    int l,  r, m, pos, inc, w3;
   
    /* verify new_data */
    if (!new_data)
    {
        printf("Erreur d'allocation de l'image\n");
        return -1;
    }

    /* verify xarray */
     xarray = (int *)malloc(sizeof(int) * width);   
    if (!xarray)
    {
        printf("Erreur d'allocation de l'image de coord. X\n");
        return -1;
    }
   
    /* verify yarray */
    yarray = (unsigned char **)malloc(sizeof(unsigned char *) * height);     
    if (!yarray)
    {
        printf("Erreur d'allocation de l'image de coord. Y\n");
        /* on libere la memoire non utilisé */
        free(new_data);
        free(xarray);
        return -1;
    }

  ptr22 = image->data;
  w3 = image->w * 3;
  inc = 0;
  l = 0;
  r = 0;
  m = width - l - r;

   
  /* décalage binaire de 16 byte */
  inc = (image->w << 16) / m;
 
  /* position 0 */
  pos = 0;
 
  /* on parcourt d'abord tous les valeurs de coordonnées x */
  for (x = l; x < l + m; x++) {
 
    /* */
    xarray[x] = (pos >> 16) + (pos >> 16) + (pos >> 16);
   
    /* incrementation de la position  */
    pos += inc;
  }
 
  pos = (image->w - r) << 16;
  for (x = width - r; x < width; x++) {
    xarray[x] = (pos >> 16) + (pos >> 16) + (pos >> 16);
    pos ++;
  }
 
  l = 0;
  r = 0;
  m = height - l - r;
 
  if (m > 0)
    inc = (image->h << 16) / m;
 
  pos = 0;
 
  for (x = l; x < l + m; x++) {
    yarray[x] = ptr22 + ((pos >> 16) * w3);
    pos += inc;
  }
 
  pos = (image->h - r) << 16;
  for (x = height - r; x < height; x++) {
    yarray[x] = ptr22 + ((pos >> 16) * w3);
    pos ++;
  }
 
  ptr = new_data;
  for (y = 0; y < height; y++) {
    for (x = 0; x < width; x++) {
      ptr2 = yarray[y] + xarray[x];
      *ptr++ = (int)*ptr2++;
      *ptr++ = (int)*ptr2++;
      *ptr++ = (int)*ptr2;
    }
  }
   
    image->h = height;
    image->w = width;
    image->data = new_data;
   
    /* on libere la mémoire */
    free(xarray);
    free(yarray);
   
       
    return 1;
}
mardi 16 décembre 2008 à 12:54:19 | Re : Resize image [Urgent !]

The Red Man

je rappel que je me suis aidé d'un autre algo.


Cette discussion est classée dans : urgent, image, resize


Répondre à ce message

Sujets en rapport avec ce message

URGENT Prb Image DIB [ par pirate75000 ] J'ai une dll qui me crée une dib d'une image,comment placer cette dib dans un tableauet comment replacer se tableau dans une dibMerci URGENT comment afficher un ".jpg" avec Visual C++ [ par sleepyallow ] Je dois afficher une image jpeg dans une fenetre (l'image changera au cours de l'execution du prog).Je dois faire ca avec visual c++.suis complètement Image Jpeg( urgent) [ par aurelien070 ] J'ai créer mon image et en fait je dois recuperer des points sur une base de .donnée)!Ensuite je les stockes dans un fichier( .txt)du style (x1=12; y1 Clipage de l'image en DirectDraw 7(Assez urgent) VC++ 6 [ par CChargy ] Bonjour, Est-ce quelqu'un pourrait me founir l'algorithme pour clipper une image en DirectDraw 7. Ceci pour eviter qu'elle sorte de l'écran et donc qu [URGENT] Inserer une image dans mon IHM [ par nerone21 ] Bonjour; alors j'ai besoin de vos lumiéres, Pour mon école G besoin de faire un projet où se situe une IHM deds, et ce serai pour simuler un ascenseu HBITMAP + resize [ par Manson ] Salut a tous,voila, je voudrais faire une fonction, si elle n'existe pas deja,a laquelle je passe un HBITMAP, une largeur et une hauteur, et elle me r transformer un fichier de points en une image ( urgent) [ par aurelien070 ] je dois transformer mon fichier contenant des points en une image (.jpeg)avec du code en c++. Je n'ai pas d'idée comment faire donc si quelqu'un peutm dessiner une image en c++( urgent++) [ par aurelien070 ] je dois dessiner sous forme d'image(.jpeg)  une courbe en c++, J'ai des points dans un fichier (.txt) et à partir de ces points je doi tracer la courb MFC image(urgent) [ par aurelien070 ] Je dois creer une image en mfc et dans cette image je dois tracer une courbe avec des points que j'ai stockés dans un fichier(.txt) (x=12,y=2,x=4,y=3. aide en c++ sur conversion d'un image bmp en matrice [ par beide ] Je suis étudiant en IUT, je n'ai jammais utilisé visual C++. <p class="MsoNormal" styl


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales