Jump to content

[C]Images[Résolu]


Premium

Recommended Posts

Salut,

J'ai une image avec des niveaux gris et noir.Je charge cette image en mémoire.

Ce que je voudrai savoir, c'est comment faire pour calculer le minimum / maximum de niveau de gris (i.e. d'altitude) de l'image

C'est pour pouvoir créer un quadtree

Link to comment
Share on other sites

ben tu la parcours et tu stockes les valeurs min et max :cartonrouge:

y a des moyen plus rapide, mais sans doute trop compliqués :cartonrouge:

Déjà pour la version que tu considères comme simple, j'ai du mal :cartonrouge:

Je n'arrive pas à saisir comment on parcours une image qui a été chargée et on récupère les valeurs souhaitées

Link to comment
Share on other sites

ben tu l'a chargée, donc tu as vraissemblablement un pointeur vers une zone de mémoire contenant tous les pixels. En gors, un simple boucle sur tous ces pixels suffit :

En considérant que image(i) est la valeur du i-ième pixel de l'image (et ce peu importe le sens de parcours)

max = 0
min = 0
Pour i allant de 0 à Hauteur*Largeur
faire
si image(i) > max alors max = image(i)
si image(i) < min alors min = valeur(i)
fin pour

une image, c'est juste un tableau de pixels. Comment tu ferais pour récupérer le min et le max d'un tableau ? :D

Link to comment
Share on other sites

Je ne vois pas qu'est ce qui pourrait être plus rapide qu'un parcourt linéaire.

Ba si le tableau memoire est pas triée ni indexé, rien ... :)

sinon un coup de dichote et autre joyeuserie

Si l'image n'a pas de propriété particuliere, je ne vois pas comment on peut eviter de parcourir chaque pixel ? Pour la vitesse par contre, on peut traiter les pixels par paquets grace aux instructions SSE.

Link to comment
Share on other sites

Salut,

J'ai un fichier fichier.txt de la forme :

image.png //filename de la fonction parse, c'est le nom de l'image

1000.0 1000.0 // width, height

240.0 //altitude_max

10.0 //tolerance

J'ai écrit une fonction parse ayant ce prototype.

int parse(const char *filename, char *png, double *width, double *height, double *altitude_max, double *tolerance)

Cette fonction permet de récupérer les valeurs du fichier

J'ai une structure gl_texture_t qui permet d'avoir des infos concernant une image

typedef struct
{
 GLsizei width;
 GLsizei height;

 GLenum format;
 GLint internalFormat;
 GLuint id;

 GLubyte *texels;

} gl_texture_t;

et une fonction ReadPNGFromFile qui permet de lire l'image qu'on lui donne. Son prototype est :

gl_texture_t * ReadPNGFromFile (const char *filename)

Le souci que j'ai est dans l'écriture d'une fonction d'une fonction :

int load(gl_texture_t *image)

qui retourne 0 si pas d'erreur et une valeur >0 sinon

car pour cette fonction, je n'ai besoin que du nom de l'image alors que ma fonction parse récupère tout le fichier.

Cette fonction permettra d'avoir toutes les infos souhaitées sur l'image chargée.

Pour cette fonction, il faut que je m'y prenne comment ?

J'aurai besoin du fichier complet lorsque je devrai créer mon quadtree.

Merci

Link to comment
Share on other sites

Attention opengl accepte uniquement pour texture des tableau memoire de pixel ! Donc ne pas essayer de lui fourger un format compressé en entrée !

Opengl est capable de lire directement des texture au format BMP ( pas de codage RLE, BMP brut ), du TGA ou des images en .RGB direct.

Si tu veux lire des textures Jpeg/png/gif tu dois passer par une librairie tierce ( libjpeg ou SDL par exemple , ou libpng pour le png) pour pouvoir decompresser l'image en memoire ce qui te donnera ton tableau de pixel.

-Envoie du nom de l'image a la fonction

-Fonction du type d'image ( extraction extension ), rediriger vers la fonction qui est capable de la decompresser.

-Ouvrir une nouvelle texture

-Remplir la texture avec notre tableau de pixel

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...