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.
Version imprimable
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:
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:
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:
1
2 PALETTEENTRY Colors[256];
L'encodage de PALETTEENTRY vers TColor se fait ainsi :Code:
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:
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 !