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
verwende?
Vielen Dank im Voraus!
Gruß
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);
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
}