Hallo ich habe folgendes Problem:
Ich lade aus einer Datei Bild-daten (Nur die Daten selbst ohne Header usw) und möchte diese als BMP auf der Festplatte speichern.
Das habe ich mit folgender Funktion bereits versucht und es Funktioniert auch "fast". Undzwar Speichert er mir die Daten als Monochrom bild (Schwarz / Weiß. Aber das Bildformat ist 8Bit und auch die Daten sind 8Bit)
Folgende Funktion habe ich benutzt:
|
C#-Quelltext
|
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
|
BOOL WriteBitmapFile(char *szFileName,BYTE *pData, int nWidth, int nHeight)
{
FILE *fp = NULL;
if ((fp = fopen(szFileName, "wb")) == NULL) return FALSE;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
bfh.bfType = 19778;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bih.biWidth = nWidth;
bih.biHeight = nHeight;
bih.biBitCount = 8;
bih.biCompression = 0;
bih.biPlanes = 1;
bih.biSize = 40;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
int nRowBytes = 0;
int lpGapBuff[4];
int nGap;
int i;
BITMAPINFO bmh;
bmh.bmiHeader = bih;
nRowBytes = (nWidth+3)/4*4;
nGap = nRowBytes - nWidth;
bfh.bfSize = 1078 + nRowBytes * nHeight;
bfh.bfOffBits = 1078;
bih.biSizeImage = nRowBytes * nHeight;
bih.biClrImportant = 256;
bih.biClrUsed = 256;
BYTE ind[1024];
for (i=0; i<1024; i++)
ind[i]=i/4;
fwrite(&bfh, sizeof(BITMAPFILEHEADER), 1, fp);
fwrite(&bmh, sizeof(BITMAPINFO), 1, fp);
fwrite(ind, sizeof(BYTE), 1024, fp);
for (i=0; i<nHeight; i++)
{
fwrite(pData+(nHeight-i-1)*nWidth, sizeof(BYTE), nWidth, fp);
fwrite(bmh.bmiColors, sizeof(BYTE), nGap, fp);
}
fclose(fp);
return TRUE;
}
|
Zusammengefasst ist also das Problem das ich keinerlei Farbe ausser Schwarz und Weiß in meiner Datei gespeichert bekomme. (PS ich lade die daten aus einer *.wad datei [Halflife])