bonsoir,enfête puisque je vais attaquer l'etalement d'un histogramme je cherche la formule qui fait ce travaille sinon des explication pour comprendre
car j'ai lus plein de discusion sur cette etape mais j'ai vrement rien compris.
bonsoir,enfête puisque je vais attaquer l'etalement d'un histogramme je cherche la formule qui fait ce travaille sinon des explication pour comprendre
car j'ai lus plein de discusion sur cette etape mais j'ai vrement rien compris.
Je vais t'envoyer à un message que tu as déjà écris: http://www.developpez.net/forums/sho...d.php?t=440609
Salut !
Pour un bitmap 8 bits c'est assez simple et très rapide puisque chaque pixel est stocké sous forme d'un index auquel correspond une teinte dans sa palette (il n'y a que 256 couleurs).
Il est inutile dans ce cas de passer par Canvas->Pixels[X][Y], sauf si on a du temps à perdre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int HistoCouleurs[256];Si on doit aussi représenter les couleurs de la palette (pour l'histogramme par exemple), il est possible de les extraire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Graphics::TBitmap *S = Image1->Picture->Bitmap; ZeroMemory(HistoCouleurs, sizeof(int) * 256); //je sais... 1024 Byte *Ligne; for(int y = 0; y < S->Height; y++) { Ligne = (Byte*)S->ScanLine[y]; for(int x = 0;x < S->Width; x++) { HistoCouleurs[ Ligne[x] ]++; } }
Ca peut également servir pour faire l'histogramme des R,G,B mais aussi pour calculer très rapidement les niveaux de gris des couleurs de la palette (détecter les doublons ou plus puisque... ici on ne sait jamais ce que donne cette conversion).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PALETTEENTRY Colors[256];L'encodage de PALETTEENTRY vers TColor se fait ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //REM Graphics::TBitmap *S... GetPaletteEntries(S->Palette, 0, 256, Colors);
Par contre pour un bitmap 24 bits ça peut être un peu plus compliqué à mettre en oeuvre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PALETTEENTRY e = Colors[n]; //Par exemple : Canvas->Pen->Color = (TColor)RGB(e.peRed, e.peGreen, e.peBlue);
Je te conseille de dessiner l'histogramme sur une autre fiche (form) que celle qui porte l'image (une FormStyle = fsStayOnTop) !
A plus !
Partager