Précédent   Forum des professionnels en informatique > Logiciels > Autres Logiciels
Autres Logiciels Bureautique, navigateurs, clients mails, traitements de textes, tableurs, multimédia, logiciels divers, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2005, 07h25   #1
Invité de passage
 
Inscription : février 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 117
Points : 4
Points : 4
Envoyer un message via MSN à Mat 74
Par défaut bitmap

salut
en ce moment je suis en train de faire une classe permettant de charger n'importe quel bitmap et de l'enregistrer en n'importe quel format mais je bloque un peu sur l'enregistrement d'un bmp en 4 ou 8 bits à partir d'un bmp de 24 bits.
j'ai déjà trouver une solution pour le 4 bits, à savoir j'écris la palette dans le fichier (tjs la même), puis ensuite je calcul la variation entre chaque pixel et chaque couleurs de la palette et je garde la couleurs ou la variation est la plus faible.
mais j'aimerais bien trouver un algorithme qui permettrait de trouver la palette la plus adapter au bitmap ...
en plus j'ai un autre pb, mon algo ne sera pas applicable sur du 1 octet (8bits) car les temps seront beaucoup trop long ...
voila donc si qq1 sait comment trouver une palette adapter à un bitmap et transformer ces pixels pour qu'ils correspondent à la palette ...

@+
Mat 74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 09h25   #2
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 495
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 21 495
Points : 28 784
Points : 28 784
Envoyer un message via MSN à Médinoc
Hum...
J'ai déjà essayé cela sous Windows en C/C++, à partir de l'exemple "storing an image".
En faisant un GetDIBits() avec les bons paramètres, j'avais pu obtenir une image 256 couleurs acceptable à partir d'un bitmap 24 bits...
Je n'ai pas le code à portée de main, mais l'appel demandait à obtenir bitmap et palette sous forme 8bpp, et cela semblait marcher à partir de n'importe quel type de bitmap...

Edit: http://www.isty-info.uvsq.fr/~benoit/Bitmap.c
Regarde du coté de la fonction Create8BitBMPFile()...
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 09h30   #3
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 904
Points : 1 904
Tu devrais poser ta question dans le forum adapté : algorithmes ou programmation sous windows.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 13h15   #4
Membre éprouvé
 
Avatar de matazz
 
Inscription : octobre 2002
Messages : 471
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 471
Points : 464
Points : 464
Si tu veut éliminers des couleurs je te conseille de regarder comment marchent les Bitmaps BitField (TrueColor ou HiColor)
regarde ce post que j'ai mis :

http://www.developpez.net/forums/vie...817680#1817680

Ta problématique (et dis moi si je me trompe) c'est d'éliminer le maximum de couleur RVB afin de pouvoir faire un palette de 256 couleurs (8 bits) ou 16 couleurs (4 bits).

Tu peut utiliser le BitField mais en le forçant à tenir sur 8 bits et pas 16...

Je te garantis pas que ça marche, mais c'est une piste...
__________________
Qui va piano va sano...
matazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 21h36   #5
Invité de passage
 
Inscription : février 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 117
Points : 4
Points : 4
Envoyer un message via MSN à Mat 74
Médinoc : en fait j'aimerais bien le faire moi même tu ne saurais pas comment fonctionne la fonction ?

ggnore : dsl je ne savais pas bien dans quel forum le mettre

matazz : sa ne m'aide pas trop de savoir comment transformer un 24 bits en 16 bits parce que il n'y à pas de palette
Mat 74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2005, 09h04   #6
Membre éprouvé
 
Avatar de matazz
 
Inscription : octobre 2002
Messages : 471
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 471
Points : 464
Points : 464
Citation:
Envoyé par Mat 74
...
matazz : sa ne m'aide pas trop de savoir comment transformer un 24 bits en 16 bits parce que il n'y à pas de palette
Je sais bien, mais c'est un exemple de méthode pour seuiller les couleurs, car dans le cas de l'exemple que je t'ai donné tu passe de 16 Millions de couleurs possibles à 32 768 couleurs possibles.

Je te donnais cet exemple dans le cas de création de palettes adaptatives...
__________________
Qui va piano va sano...
matazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2005, 10h07   #7
Invité de passage
 
Inscription : février 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 117
Points : 4
Points : 4
Envoyer un message via MSN à Mat 74
ah, j'ai compris ce que tu voulais dire mais dans ce cas il faut que je supprime plus que 3 bits par octet parce que 32 768 c'est encore trop
Mat 74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2005, 10h12   #8
Membre éprouvé
 
Avatar de matazz
 
Inscription : octobre 2002
Messages : 471
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 471
Points : 464
Points : 464
Citation:
Envoyé par Mat 74
ah, j'ai compris ce que tu voulais dire mais dans ce cas il faut que je supprime plus que 3 bits par octet parce que 32 768 c'est encore trop
Oui, mais généralement tu n'as pas 32 768 couleurs dans la même image.
Effectivement il se peut que tu doive décaler de plus de 3 bits, il faut que tu t'adapte en fontion de des couleurs de l'image...
__________________
Qui va piano va sano...
matazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 00h03   #9
Invité de passage
 
Inscription : février 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 117
Points : 4
Points : 4
Envoyer un message via MSN à Mat 74
j'ai un petit pb,
en suivant ton exemple matazz j'ai réussi à faire la conversion mais il y a un truc qui va pas il ne me garde pas le blanc.
en fait je prend les 3 bits de poid fort du rouge les 2 bits de poid fort du vert et les 3 bits de poid fort du bleu.
en fait c'est logique qd on réfléchit vu que je garde que 3bits la valeur max est 224.
quelqu'un n'aurais pas une solution pour conserver qqchose qui ressemble à du blanc (gris) ?

voila le code des fonctions pour convertir un pixel RVB en octet et l'inverse
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
unsigned char Bitmap::PixelOctet (Pixel p)
{
	bool* r = DecimalBinaire (p.r);
	bool* v = DecimalBinaire (p.v);
	bool* b = DecimalBinaire (p.b);

	bool o[8];
	o[0] = r[0];
	o[1] = r[1];
	o[2] = r[2];
	o[3] = v[0];
	o[4] = v[1];
	o[5] = b[0];
	o[6] = b[1];
	o[7] = b[2];
		
	return BinaireDecimal (o);
}
Pixel Bitmap::OctetPixel (unsigned char octet)
{
	bool* o = DecimalBinaire (octet);

	bool r[8];
	r[0] = o[0];
	r[1] = o[1];
	r[2] = o[2];
	r[3] = 0;
	r[4] = 0;
	r[5] = 0;
	r[6] = 0;
	r[7] = 0;
	bool v[8];
	v[0] = o[3];
	v[1] = o[4];
	v[2] = 0;
	v[3] = 0;
	v[4] = 0;
	v[5] = 0;
	v[6] = 0;
	v[7] = 0;
	bool b[8];
	b[0] = o[5];
	b[1] = o[6];
	b[2] = o[7];
	b[3] = 0;
	b[4] = 0;
	b[5] = 0;
	b[6] = 0;
	b[7] = 0;

	return Pixel(BinaireDecimal(r),BinaireDecimal(v),BinaireDecimal(b));
}
Mat 74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 19h15   #10
Invité de passage
 
Inscription : février 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 117
Points : 4
Points : 4
Envoyer un message via MSN à Mat 74
es-ce qu'un modérateur pourrait déplacer ce sujet dans :
algorithmes ou programmation sous windows
Mat 74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2005, 15h50   #11
Membre éprouvé
 
Avatar de matazz
 
Inscription : octobre 2002
Messages : 471
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 471
Points : 464
Points : 464
En fait si tu veut garder un blanc pur, tu ne peut pas compresser, si tu as des couleur pure 0xFF0000, 0x00FF00, 0x0000FF,... et que tu veut les garder, je te conseille de les mettre dans ta palette directement sans les compresser...
__________________
Qui va piano va sano...
matazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h59.


 
 
 
 
Partenaires

Hébergement Web