BMP to Array
-
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);