The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 2010
-
6 déc. 2008 à 04:24
The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 2010
-
16 déc. 2008 à 12:54
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 !
The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 20102 8 déc. 2008 à 19:48
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.
The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 20102 6 déc. 2008 à 12:25
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;
BunoCS
Messages postés15358Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 mars 2023102 6 déc. 2008 à 13:47
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 20102 7 déc. 2008 à 19:53
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.
The Red Man
Messages postés111Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 juin 20102 16 déc. 2008 à 12:53
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;
/* 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 */