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

0/5 (13 avis)

Vue 14 742 fois - Téléchargée 902 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
24 déc. 2010 à 19:46
wxcwx
Pistol_Pete Messages postés 1054 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
12 avril 2007 à 16:53
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
13 mai 2006 à 16:20
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
23 mai 2005 à 17:03
bonne source merci
julllieee Messages postés 2 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 6 mai 2004
6 mai 2004 à 11:34
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
Afficher les 13 commentaires

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.