BMP to Array
-
Hallo,
wisst ihr wie ich in der WinAPI BMPs laden und dann in einem 2d Array laden kann, im Array muss der RGB Wert stehen...
Danke für die Hilfe im Vorraus.
-
Im Spiele-Grafik-Forum gabs erst gestern einen Thread dazu. Wenn du aber alles über BMPs wissen willst, würd ich auf wotsit.org schauen. Das Laden in ein Array ist dann ein Kinderspiel ...
M.T.
-
Bitmap laden: LoadImage
RGB Werte: GetDIBits
Tip: Die Bildzeilen enthalten am Ende Füllbytes, um die nachfolgende Zeile an DWORD Grenze auszurichten, d.h. die Zeilen sind breiter als das sichtbare Bild
-
Hi,
Nochmal danke für die Antworten, aber ich steig da immer noch nicht durch
Im anderen Therad hab ich leider nicht gefunden was ich brauche.
Wie wäre es mit Codeschnipsel
-
Hier ist der Code, um die BMP-Datei zu laden:
FILE *bmp; bmp = fopen("C:\\bild.bmp","rb"); BITMAPFILEHEADER bitmap_header; //Bitmap-Header BITMAPINFOHEADER bitmap_info; //Bitmap-Info fread(&bitmap_header,sizeof(BITMAPFILEHEADER),1,bmp); fread(&bitmap_info,sizeof(BITMAPINFOHEADER),1,bmp); for(int y = 0; y < bitmap_info.biHeight; y++) { for(int x = 0; x < bitmap_info.biWidth; x++) { UCHAR r; UCHAR g; UCHAR b; fread(&r,sizeof(UCHAR),1,bmp); fread(&g,sizeof(UCHAR),1,bmp); fread(&b,sizeof(UCHAR),1,bmp); //Hier Daten ins Array packen ... if(x == bitmap_info.biWidth) { //Abschluss-Byte lesen fread(&r,1,1,bmp); } } } fclose bmp;
M.T.
-
Laden geht ... Danke!
Gibt es auch ne Möglichkeit Colorref Arrays über 100x100 zu deklarieren? Kompilieren geht, nur wenn ichs starte bricht das ab
Vielleicht auch nur ein anderer Fehler?
Hier:bool Generate() { COLORREF array[100000][100000] = {0}; // Absturz FILE *bmp; if(bmp = fopen("C:\\bild.bmp","rb")) { BITMAPFILEHEADER bitmap_header; //Bitmap-Header BITMAPINFOHEADER bitmap_info; //Bitmap-Info fread(&bitmap_header,sizeof(BITMAPFILEHEADER),1,bmp); fread(&bitmap_info,sizeof(BITMAPINFOHEADER),1,bmp); for(int y = 0; y < bitmap_info.biHeight; y++) { for(int x = 0; x < bitmap_info.biWidth; x++) { UCHAR r; UCHAR g; UCHAR b; fread(&r,sizeof(UCHAR),1,bmp); fread(&g,sizeof(UCHAR),1,bmp); fread(&b,sizeof(UCHAR),1,bmp); //Hier Daten ins Array packen ... array[x][y] = RGB(r,g,b); // Absturz if(x == bitmap_info.biWidth) { //Abschluss-Byte lesen fread(&r,1,1,bmp); } } } fclose(bmp); } return true; }
-
@Manuel
Funzt nur mit RGB-Bildern!
-
Wie wäre es, wenn Du Deinem PC einen Speicher von 100000x100000 = 10GB RAM spendierst??
-
Hmm, wo gibts den denn?
Nein, aber ich brauche mindestens 1000x1000 und das geht nicht
-
Erhöh Deinen Stackbedarf in den Linkereinstellungen
-
Projekt->Einstellungen oder wo?
Aha, gefunden jetzt funzt es bei 1000x1000[ Dieser Beitrag wurde am 22.04.2003 um 13:55 Uhr von Timm editiert. ]
-
Sonst packs halt auf den Heap.
-
Danke für eure Hilfe, ich bin sehr Weit gekommen, doch stecke wieder fest
Beim schreiben in die Datei, kommen blanks oder [] sowas im hexeditor sind das 00 oder sowisst ihr wie ich das rausfilter? sonst ist 100x100 über 19mb groß
Hier Code:
COLORREF array[1000][1000]; bool Generate() { LPCTSTR color; LPCTSTR name; LPTSTR temp=""; BITMAPFILEHEADER bitmap_header; //Bitmap-Header BITMAPINFOHEADER bitmap_info; //Bitmap-Info int nord=0; int sued=0; int ost=0; int west=0; int id =0; int x = 0; int y = 0; FILE *bmp; FILE *file; if(bmp = fopen("C:\\bild.bmp","rb")) { fread(&bitmap_header,sizeof(BITMAPFILEHEADER),1,bmp); fread(&bitmap_info,sizeof(BITMAPINFOHEADER),1,bmp); for(y = 0; y < bitmap_info.biHeight; y++) { for(x = 0; x < bitmap_info.biWidth; x++) { UCHAR r; UCHAR g; UCHAR b; fread(&r,sizeof(UCHAR),1,bmp); fread(&g,sizeof(UCHAR),1,bmp); fread(&b,sizeof(UCHAR),1,bmp); //Hier Daten ins Array packen ... array[x][y] = RGB(r,g,b); if(x == bitmap_info.biWidth) { //Abschluss-Byte lesen fread(&r,1,1,bmp); } } } fclose(bmp); } file = fopen("C:\\bild.txt","a+"); for(y = 0; y < bitmap_info.biHeight; y++) { for(x = 0; x < bitmap_info.biWidth; x++) { if(array[x][y] != RGB(192,192,192)) { //Richtungen if(array[x-1][y] != RGB(192,192,192)) { west = 1; } if(array[x+1][y] != RGB(192,192,192)) { ost = 1; } if(array[x][y+1] != RGB(192,192,192)) { sued = 1; } if(array[x][y-1] != RGB(192,192,192)) { nord = 1; } if(array[x][y] == RGB(0,255,0)) { name = "Wiese"; color = "00ff00"; } else if(array[x][y] == RGB(255,0,0)) { name = "Stadt"; color = "ff1100"; } else if(array[x][y] == RGB(128,128,128)) { name = "Pfad"; color = "666666"; } else if(array[x][y] == RGB(255,255,0)) { name = "Sand"; color = "FFFF00"; } else if(array[x][y] == RGB(0,128,0)) { name = "Wald"; color = "008800"; } else if(array[x][y] == RGB(34,34,34)) { name = "Gebirge"; color = "222222"; } else { name = "Nichts"; } wsprintf(temp,"INSERT INTO map VALUES (%d, %d, %d, %d, %d, 0, 0, 0, 0, %d, %d, 0, 0, '%s', '', '%s', 0);\n",id,nord,ost,sued,west,x,y,name,color); fwrite(temp,sizeof(LPTSTR),strlen(temp),file); } } } fclose(file); return true; }
[ Dieser Beitrag wurde am 23.04.2003 um 00:17 Uhr von Timm editiert. ]
-
fwrite(temp, sizeof(TCHAR), strlen(temp), file);