begin process at 2012 05 27 15:25:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > DECALER L'ENCODAGE D'UN BMP

DECALER L'ENCODAGE D'UN BMP


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :06/06/2005 Vu / téléchargé :3 781 / 262

Auteur : skone007

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
On ouvre une fichier BMP 24 bits avec une classe coder par Kirua qui m'a genereusement offert lol. Et avec une classe DecalBit Apres avoir lu le header et mis le codage des pixels dans un tableau decaler les bits un a un a gauche ou a droite de N bit.
<<
>>
Nous ne fesons pas que decaler nous recuperons les bits de poids faible pour les remettres de l'autre coter sinon nous aurons une perte de donner et impossible de recuperer les informations de bases :

Source

  • // Exemple de decalage de bit a droite avec un octet c et du k:
  • f = c & ((1 << k) - 1); // Nous recuperons les bits de poids faibles
  • c >>= k; // Decalons l'octet de k
  • f <<= (8 - k); // Decalons le bit de poids faible de l'autre coté
  • c |= f; // Et avec un ou l'ogique nous "melangons" les 2
// Exemple de decalage de bit a droite avec un octet c et du k:
    f = c & ((1 << k) - 1); // Nous recuperons les bits de poids faibles
    c >>= k; // Decalons l'octet de k
    f <<= (8 - k); // Decalons le bit de poids faible de l'autre coté
    c |= f; // Et avec un ou l'ogique nous "melangons" les 2

 Conclusion

Exemple avec l'octet :
1001 1010
Decalage de 2 a droites
Explication
Un decalage a gauche est une multiplication donc 1 << k equivaut a 2^k
1 << k = 0000 0100
(1 << k) - 1 = 0000 0011
Alors le bit de poids faible est :
  1001 1010 = c
& 0000 0011 = ((1 << k) - 1)
___________
  0000 0010 = f

Decalons notre octet de base a droite de 2
1001 1010 >> 2 = 0010 0110 = c
f <<= (8 - k) <=> f <<= (8 - 2) <=> f <<= 6
f <<= 6 <=> f = 1000 0000
  0010 0110
| 1000 0000
___________
  1010 0110

Voilà notre bit decaler :p

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture RÉSOLUTION NUMERIQUE
Source avec Zip Source avec une capture MOTEUR PHYSIQUE : SOFT BODY (CORPS DEFORMABLE, MASSE-RESSORT...
CONVERTIR MINUSCULE EN MAJUSCULE ET INVERSSEMENT SANS "STRIN...
Source avec Zip ALGORITHME DU JEU DE DAME + AI
Source avec Zip MORPION + AI (EXPERT)

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

Commentaires et avis

Commentaire de shenron666 le 07/06/2005 09:45:02

Amusant comme source :-)
par contre il y a kkes problèmes dans Decal_bit.cpp :
CDecal_bit::dbit :
if(s = 1) // toujours vrai, c'est pas un test ^__^
faute de frappe ?

paramètre (unsigned char& c...
tu passes une référence, donc si on modifie c, on modifie la source, tu devrais sois mettre (const unsigned char& c...
sois ne pas retourner de valeur et modifier c

en fait tu fais de la rotation de bits sur des octets
si je puis me permettre, tu aurais pu faire une seule fonction pour la rotation :

// Decalage en fonction de s (s = 1 a droite sinon a gauche)
unsigned char CDecal_bit::dbit(const unsigned char &c, bool s, int k)
{
k %= 8; // k doit être compris entre 0 et 7 inclus (me suis pas trompé là ;p)
if(s == 0) // rotation à gauche = rotation à droite de 8 - k
k = 8 - k;
return dbitd(c, k);
}

// Decalage bit droite
unsigned char CDecal_bit::dbitd(const unsigned char &c, int k = 1)
{
return (c >> k) | (c << (8 - k));
}

Commentaire de shenron666 le 07/06/2005 09:50:46

j'oublie un truc, les décalages de bits négatifs c'est pas terrible, k devrait plutot être unsigned je pense

Commentaire de neria le 07/06/2005 14:41:11

Une question : ça sert à quoi ???

Commentaire de hackademius le 07/06/2005 16:20:06

oaui , bonne question , ca sert a quoi ? de decaler les bits ? ca coupe en 2 la photo et met la partie de droite a gauche ? ou koi ?

Commentaire de hackademius le 07/06/2005 16:22:28

ou alors a brouiller la photo pour que l'on ne la reconnaisse plus ? peut etre

Commentaire de skone007 le 07/06/2005 16:45:59

shenron666 >>= Pour la reference ouaih. Mais pour le s c'est une valeur par defaut si y a rien de definie ca prenderas la valeur 1 mais rien n'interdis au programmeur de mettre un 0.

neria >>= Ca a pas vraiment la pretention je sais pas ta deja coder un truc vraiment utile et utiliser par tous maintenant et reconnu comme une reference ? Non plus serieusement c'est juste pour un TPE sur le cryptage lol donc voilà on permute les bits dans un octets...

Ca peut pas couper une image au passage ;) parce que c'est le rouge le vert et le bleu qu'on permute un a un ...

Commentaire de neria le 08/06/2005 18:58:15

Salut !

   Ca me rappelle mon TPE de l'année denrière sur la compression des images numériques, j'avais justement fais un programme (en VB)  qui permettait de lire (presque) tous les formats BMP (8, 16, 24 bits, N&B, RLE ...) et de les enregistrer dans ces formats, enfin il y a pleins d'application facile à réaliser avec le BMP !!!

@+ Neria

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales