Bitmap Farbtabelle erstellen.

asdfghjkl1234

Grünschnabel
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:
bmpdata.write((char*)&bmp, 3);
verwende?

Vielen Dank im Voraus!
Gruß

Code:
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
}
 
Zurück