Creer,lire,ecrire et seuiller une image raw(allocation dynamique ...)

Soyez le premier à donner votre avis sur cette source.

Vue 13 494 fois - Téléchargée 859 fois

Description

Bon, c'etait une demande du forum, alors je fais en faire profiter tout le monde ...C'est hyper basique et c'est en mode console, donc rien de bien extraordinaire ...

!!! qd vous saisissez les nom d'images, il faut rajouter l'extension ".raw" (photoshop le genere et le lit tres bien ...)

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

unsigned char ** allocation(int NBL, int NBC)
{
	int i, j;
	unsigned char **image;

	image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
	if (image == NULL)
		return(NULL);

	for (i=0;i<NBL;i++)
	{
		image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
		if (image[i] == NULL)
		{
			for (j=0;j<i;j++)
				free(image[j]);

			free(image);
			return(NULL);
		}
	}

	return(image);
}

void desallocation(unsigned char **image, int NBL)
{
	int i;

	if (image == NULL)
		exit(0);

	for (i=0;i<NBL;i++)
		free(image[i]);

	free(image);
}

void LireImageRAW(unsigned char** image, int NBL, int NBC)
{
	char nom_image[256];
	FILE * fic_image;
	int i, j;

	getchar();
	printf("Nom de l'image a ouvrir : \n");
	gets(nom_image);

	fic_image = fopen(nom_image,"rb");

	if (fic_image == NULL)
	{
		printf("Erreur a l'ouverture de l'image ...\n");
		exit(0);
	}
	else
		printf("Image ouverte avec succes ...\n");

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
			fread(&image[i][j],1,1,fic_image);

	fclose(fic_image);
}

void EcrireImageRAW(unsigned char** image, int NBL, int NBC)
{
	char nom_image[256];
	FILE * fic_image;
	int i, j;

	getchar();
	printf("Nom de l'image a ecrire : \n");
	gets(nom_image);

	fic_image = fopen(nom_image,"wb");

	if (fic_image == NULL)
	{
		printf("Erreur a la creation de l'image ...\n");
		exit(0);
	}
	else
		printf("Image cree avec succes ...\n");

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
			fwrite(&image[i][j],1,1,fic_image);

	fclose(fic_image);
}

void SeuilImageRAW(unsigned char** image, int NBL, int NBC, int seuil)
{
	int i, j;

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
		{
			if (image[i][j] < seuil)
				image[i][j] = 0;
			else
				image[i][j] = 255;
		}
}

int main()
{
	unsigned char ** image;
	int NBL, NBC, seuil;

	printf("Nombre de lignes de l'image :\n");
	scanf("%d",&NBL);
	printf("Nombre de colonnes de l'image :\n");
	scanf("%d",&NBC);

	image = allocation(NBL,NBC);

	if (image != NULL)
	{
		LireImageRAW(image,NBL,NBC);

		printf("Seuil a appliquer : \n");
		scanf("%d",&seuil);

		SeuilImageRAW(image,NBL,NBC,seuil);
		EcrireImageRAW(image,NBL,NBC);
		desallocation(image,NBL);
	}
	else
	{
		printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
		return 1;
	}

	return 0;
}

Conclusion :


j'ai pas mis de commentaires, mais c'est pas hyper complique ... sinon, posez vos questions!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

aliale
Messages postés
1
Date d'inscription
samedi 20 janvier 2007
Statut
Membre
Dernière intervention
24 décembre 2010
-
wxcwx
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6 -
Salut,
Il faudrait que j'ouvre des fichiers raw 16 bits. Aussi, pour voir le résultat j'ai photoshop et je ne peux le lire l'image que quand je place l'option macintoch.(la seconde option étant IBM PC)
Est ce que tu connais la différence entre l'ouverture Macintoch et IBM PC?
Pour mon image, je la lis octet par octet en commencant par le MSB puis par le LSB. Cependant, cette image est largement plus bruité par rapport à ce que photoshop me donne.
Est ce que tu pourrais me l'expliquer?
jbahans
Messages postés
17
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
26 septembre 2004
-
Super code, simple, mais il fallait y penser, cela me servira beaucoup. Jérôme
martinbrochet
Messages postés
33
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
25 mai 2005
-
bonne source merci
julllieee
Messages postés
2
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
6 mai 2004
-
bonjour,
je voulais juste savoir, je commence juste dans le traitement d'images et je n'ai pas fait d'etudes d'info, mais je cherche un code qui permet de transformer mes images.raw en image.pgm, pour que je puisse les traiter.
En tout cas le code de lecture et d'ecriture des .raw est tres bien, merci.
Si vous pouviez m'aider
merci d'avance
julie

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.