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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
int row, col;
jRgb * pRgb;
//RAZ du tableau
for(col = 0; col < 4; col++)
{
for(row = 0; row < 256; row++)
{
Result[col][row] = 0;
}
}
Graphics::TBitmap *B = Image1->Picture->Bitmap;
Byte r,g,b;
int gl;
Byte *Line;
switch(B->PixelFormat)
{
case pf8bit :
//Couleurs de la palette dans PaletteEntries
GetPaletteEntries(B->Palette, 0, 256, PaletteEntries);
//Conversion en niveau de gris des 256 couleurs
for(int j = 0; j < 256; j++)
{
E = PaletteEntries[j];
gl = ((E.peRed * 30) + (E.peGreen * 59) + (E.peBlue * 11)) / 100;
GreyLevels[j] = (Byte)gl;
}
//On peut commencer le calcul de l'histogramme
for(row = 0; row < B->Height; row++)
{
Line = (Byte*)B->ScanLine[row];
for(col = 0; col < B->Width; col++)
{
//le pixel comme index et non comme RGB
b = Line[col];
// les composantes RGB du pixel
E = PaletteEntries[b];
//Que l'on comptabilise
Result[blue][E.peBlue]++;
Result[green][E.peGreen]++;
Result[red][E.peRed]++;
//On va chercher le niveau de gris que l'on comptabilise
Result[grey][ GreyLevels[b] ]++;
//pixel suivant
Line++;
}
}
break;
case pf24bit :
//Remplissage du tableau
for(row = 0; row < B->Height; row++)
{
pRgb = (jRgb*)B->ScanLine[row];
for(col = 0; col < B->Width; col++)
{
b = pRgb->Blue;
Result[blue][b]++;
g = pRgb->Green;
Result[green][g]++;
r = pRgb->Red;
Result[red][r]++;
gl = ((r * 30) + (g * 59) + (b * 11)) / 100;
Result[grey][gl]++;
pRgb++;
}
}
}
//Remplissage du StringGrid
for(col=1; col < 5; col++)
{
for(row = 1; row < 257; row++)
{
StringGrid1->Cells[col][row] = IntToStr(Result[col-1][row-1]);
}
} |
Partager