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 so 🙂 wisst 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);


Anmelden zum Antworten