gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

DS development > Bitmap Loader

#138071 - Robthar - Sun Aug 19, 2007 11:26 am

Whats wrong about this Bitmap-loader?
It does not show the right information!
Code:

   namespace Memory {
      uint8   GetUint8ExUint8(uint8* source,uint32 address){
         return (uint8)(source[address]);
      }
      uint16   GetUint16ExUint8(uint8* source,uint32 address){
         return (uint16)(((source[address+1]<<8) | (source[address])));
      }
      uint32   GetUint32ExUint8(uint8* source,uint32 address){
         return (uint32)(((source[address+3]<<24) | (source[address+2]<<16) | (source[address+1]<<8) | (source[address])));
      }
      namespace Reversed {
         uint8   GetUint8ExUint8(uint8* source,uint32 address){
            return (uint8)(source[address]);
         }
         uint16   GetUint16ExUint8(uint8* source,uint32 address){
            return (uint16)(((source[address]<<8) | (source[address+1])));
         }
         uint32   GetUint32ExUint8(uint8* source,uint32 address){
            return (uint32)(((source[address]<<24) | (source[address+1]<<16) | (source[address+2]<<8) | (source[address+3])));
         }
      }
   }


Code:

         Bitmap(const char* FileAddress){
            uint8* filebuffer;
            uint32 filelength;
            uint32 filedata;
            uint32 fileheadersize;

            FILE*   f   =   fopen(FileAddress,"rd");
            if(!f){
               iprintf("File %s not found",FileAddress);
            }
            else
            {
                        fseek(f,0,SEEK_END);
            long   l   =   ftell(f);
            filebuffer   =   new uint8[l];
                        fread(filebuffer,1,l,f);
                        fclose(f);

               filelength   =   Memory::GetUint32ExUint8(filebuffer,2);
               filedata   =   Memory::GetUint32ExUint8(filebuffer,10);
               fileheadersize=   Memory::GetUint32ExUint8(filebuffer,14);

               Width      =   Memory::GetUint32ExUint8(filebuffer,18);
               Height      =   Memory::GetUint32ExUint8(filebuffer,22);
               Layers      =   Memory::GetUint16ExUint8(filebuffer,26);
               BitsPP      =   Memory::GetUint16ExUint8(filebuffer,28);
            }
         }

In Main.cpp
Code:

   Bitmap* b = new Bitmap("kuehlschrank/bmptest.bmp");
   iprintf("Bitmap Height :%u\n",b->Height);
   iprintf("Bitmap Width  :%u\n",b->Width);

   iprintf("Bitmap Layers :%u\n",b->Layers);
   iprintf("Bitmap BitsPP :%u\n",b->BitsPP);

#138086 - Lick - Sun Aug 19, 2007 5:36 pm

fopen(FileAddress,"rd");

"rd" is not a valid switch. Try "r" or "rb".
_________________
http://licklick.wordpress.com