| 12
 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