Hallo,

ich habe einen BITMAPFILEHEADER und BITMAPINFOHEADER geschrieben. Zudem habe ich ein Feld bestehend aus den char-Werten 0, 1, 2, 3, 4 und 5. Je nach Wert möchte ich eine bestimmte Farbe zuweisen. Zunächst hatte ich für biBitCount = 24 angegeben und mit RGBQUAD gearbeitet. Da ich allerdings bei weiten nicht so viele Farben brauche möchte ich für biBitCount = 4 einsetzten. Dazu brauche ich aber anschließend eine Farbtabelle (Color table bzw. color palette) in der ich die 16 Farben definiere/angebe.
Leider weis ich auch nach einer Internetrecherche noch nicht wie ich das machen/programmieren kann.

Kann mir jemand erklären wie so eine Farbpalette aufgebaut ist und wie ich sie dann für
Code :
1
bmpdata.write((char*)&bmp, 3);
verwende?

Vielen Dank im Voraus!
Gruß

Code :
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
void bitmap(int iDim_Raster, char** AnzahlUeberschneidungen)
{
    int iZ;
    int iS;
    char a_n;
 
    ofstream bmpdata("fahrrad.bmp", ios::out|ios::binary);  //begin stream
    
    /*Bitmapfileheader*/
    BITMAPINFOHEADER bmpinfo;
    bmpinfo.biSize = sizeof(BITMAPINFOHEADER); 
    bmpinfo.biWidth =  iDim_Raster;
    bmpinfo.biHeight =  iDim_Raster; 
    bmpinfo.biPlanes = 1;
    bmpinfo.biBitCount = 24;                                                           
    bmpinfo.biCompression = BI_RGB; 
    bmpinfo.biSizeImage = 0; 
    bmpinfo.biXPelsPerMeter = 0; 
    bmpinfo.biYPelsPerMeter = 0; 
    bmpinfo.biClrUsed = 0;
    bmpinfo.biClrImportant = 0;    
    
    /*Bitmapinfoheader*/
    BITMAPFILEHEADER bmpfile;
    bmpfile.bfType = 'MB';
    bmpfile.bfSize = (bmpinfo.biWidth * bmpinfo.biHeight * (bmpinfo.biBitCount / 8)) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bmpfile.bfReserved1 = 0; 
    bmpfile.bfReserved2 = 0; 
    bmpfile.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
 
    bmpdata.write((char*)&bmpfile, sizeof(bmpfile));
    bmpdata.write((char*)&bmpinfo, sizeof(bmpinfo));
 
    /*Beschreibt eine Farbe nach der relativen Intensität von blau, rot und grün*/
    
    for(iZ = 0; iZ < bmpinfo.biWidth; iZ++)
    {
        for(iS = 0; iS < bmpinfo.biHeight; iS++)
        {
            a_n = AnzahlUeberschneidungen[iZ][iS];
 
            if(a_n == 0)
            {
                RGBQUAD bmp;    //color table, bei biBitCount kleiner 24 muss man eine palette anlegen
                bmp.rgbBlue = 255; 
                bmp.rgbGreen = 255; 
                bmp.rgbRed = 255;
 
                bmpdata.write((char*)&bmp, 3);
                continue;
            }
        }
    }
    bmpdata.close();    //stream end, bmp created
}