#90909 - HtheB - Mon Jul 03, 2006 12:43 pm
    Hi, I want to convert .bmp to .raw..
I tried many tools that I could find (yes.. even on gbadev)
It didnt work with any application.. (it wont work on the DS)
I had conv.exe.. (it was the best so far..) but.. does anyone has the conv.exe? b/c I think I have a corrupted version of it.. (the images works.. but its VERY weird..)
if someone know where to find it.. please tell me ^_^
tnq! :)
    
 
    #90921 - silent_code - Mon Jul 03, 2006 2:19 pm
    use usenti and/or (win)git (google for it ;) )... should solve your problems (except for 16bit images)...
    
 
    #90930 - LiraNuna - Mon Jul 03, 2006 3:47 pm
    what format you need the .raw as? 16col, 256col 32kcol ?
if it's one of those, gfx2gba is what you're looking for.
 | Code: | 
  | gfx2gba -c[16/256/32k] img.bmp | 
_________________
Private property.
Violators will be shot, survivors will be shot again.     
 
    #90938 - HtheB - Mon Jul 03, 2006 4:56 pm
     | silent_code wrote: | 
  | use usenti and/or (win)git (google for it ;) )... should solve your problems (except for 16bit images)... | 
Tried out allready ;)
didnt work..
 | LiraNuna wrote: | 
  | what format you need the .raw as? 16col, 256col 32kcol ? if it's one of those, gfx2gba is what you're looking for.
 
 
  | Code: |   | gfx2gba -c[16/256/32k] img.bmp | 
 | 
Allready tried out.. didn't work eather..
its 24bit bmp format.. ^_^
so.... I really need that conv.exe its the only way :( 
    #90942 - silent_code - Mon Jul 03, 2006 5:11 pm
    then just save it in 16 or 8 bit ;) that way you'll be able to use gfx2gba or the tools i mentioned... shouldn't be a problem ;)
    
 
    #90943 - Cearn - Mon Jul 03, 2006 5:29 pm
     | HtheB wrote: | 
  |  | silent_code wrote: |   | use usenti and/or (win)git (google for it ;) )... should solve your problems (except for 16bit images)... | 
 Tried out allready ;)
 didnt work..
 | 
Could you define 'didn't work' here? Apart from the alpha bit, these tools should give the proper result even for 24bit images. 
    #91043 - HtheB - Tue Jul 04, 2006 6:41 am
     | Cearn wrote: | 
  |  | HtheB wrote: |   |  | silent_code wrote: |   | use usenti and/or (win)git (google for it ;) )... should solve your problems (except for 16bit images)... | 
 Tried out allready ;)
 didnt work..
 | 
 Could you define 'didn't work' here? Apart from the alpha bit, these tools should give the proper result even for 24bit images.
 | 
Ok, I will make pictures and show them.. (really its horrible :( ) 
    #91151 - silent_code - Tue Jul 04, 2006 10:27 pm
    you better do ;)
it sounds like it's a code problem... i'm using 24bit .bmp files with usenti and (win)git and the only problem i have is the 24 to 16bit conversion of my raytraced images :( (look at the other thread about that problem).
but that's nothing to do with the tools.
    
 
    #91217 - HtheB - Wed Jul 05, 2006 10:55 am
     | silent_code wrote: | 
  | you better do ;) 
 it sounds like it's a code problem... i'm using 24bit .bmp files with usenti and (win)git and the only problem i have is the 24 to 16bit conversion of my raytraced images :( (look at the other thread about that problem).
 but that's nothing to do with the tools.
 | 
this is what it says in the conv.cpp
 | Code: | 
  | #include <stdio.h> 
 typedef unsigned short ushort;
 typedef unsigned char byte;
 typedef unsigned int uint;
 
 #define RGB(r,g,b) ((1 << 15) | (r) | ((g) << 5) | ((b) << 10))
 //#define RGB(r,g,b) ((b) | ((g) << 6) | ((r) << 11))
 
 
 char *dumpFile(char* name) {
 char *font;
 int size;
 
 FILE *fd = fopen(name, "r");
 fseek(fd, 0, SEEK_END);
 size = ftell(fd);
 fseek(fd, 0, SEEK_SET);
 font = new char[size];
 fread(font, 1, size, fd);
 fclose(fd);
 
 return font;
 }
 
 int main(int argc, char** argv) {
 byte rgb[3];
 ushort *dataOff;
 int off, pad;
 char *file = dumpFile(argv[1]);
 char *fileOff;
 uint width, height;
 int size;
 ushort * data;
 
 width = *(uint*)(file + 18);
 height = *(uint*)(file + 22);
 data = new ushort[width * height];
 size = width * height * 2;
 
 off = 0;
 pad = (3000 - width * 3) & 3;
 
 fileOff = file + 0x36;
 dataOff = data + (height - 1) * width;
 for (int y = 0; y < height; y++) {
 for (int x = 0; x < width; x++) {
 rgb[0] = (byte)(*fileOff++);
 rgb[1] = (byte)(*fileOff++);
 rgb[2] = (byte)(*fileOff++);
 dataOff[x] = RGB(rgb[2] >> 3,
 rgb[1] >> 3,
 rgb[0] >> 3);
 }
 dataOff -= width;
 fileOff += pad;
 }
 
 
 FILE *fd = fopen(argv[2], "w");
 rgb[0] = height;
 rgb[1] = width;
 fwrite(rgb, 1, 2, fd);
 fwrite(data, size, 1, fd);
 fclose(fd);
 
 delete[] (file);
 }
 | 
 
    #91239 - HtheB - Wed Jul 05, 2006 3:49 pm
    when I compile it.. and use it (conv.exe) I still get corrupted pictures :(
    
 
    #91246 - Cearn - Wed Jul 05, 2006 5:13 pm
    That conv.exe works fine*, you're either not giving it the right kind of bitmap, or using the data it produces wrongly. Check your video mode settings.
* Though it's a minor miracle: no comments, magic numbers galore  and no safety checks of any kind. The thing expects a 24bpp, version 3, bottom-up windows bitmap, where the width is a multiple of 4, but doesn't mention that anywhere. These conditions are probably met for your bitmap, but anything else will probably hang or crash the program, or worse: give incorrect output. The fact that the fopen() calls do not explicitly use binary mode is also slightly worrying; I'm not 100% sure, but that may give bad results if bytes are 0x0A ('\n') or 0x0D ('\r').
Also note that the first 2 bytes give the size of the bitmap. Again, not documented, and would be wrong for DS-screensized bitmaps or larger.
    
 
    #91263 - HtheB - Wed Jul 05, 2006 7:12 pm
     | Cearn wrote: | 
  | That conv.exe works fine*, you're either not giving it the right kind of bitmap, or using the data it produces wrongly. Check your video mode settings. 
 * Though it's a minor miracle: no comments, magic numbers galore  and no safety checks of any kind. The thing expects a 24bpp, version 3, bottom-up windows bitmap, where the width is a multiple of 4, but doesn't mention that anywhere. These conditions are probably met for your bitmap, but anything else will probably hang or crash the program, or worse: give incorrect output. The fact that the fopen() calls do not explicitly use binary mode is also slightly worrying; I'm not 100% sure, but that may give bad results if bytes are 0x0A ('\n') or 0x0D ('\r').
 Also note that the first 2 bytes give the size of the bitmap. Again, not documented, and would be wrong for DS-screensized bitmaps or larger.
 | 
YES!!! I GOT IT TO WORK!!!
i changed:
 | Code: | 
  | FILE *fd = fopen(name, "r"); | 
and 
 | Code: | 
  | FILE *fd = fopen(argv[2], "w"); | 
into:
 | Code: | 
  | FILE *fd = fopen(name, "rb"); | 
and
 | Code: | 
  | FILE *fd = fopen(argv[2], "wb"); | 
and it works! tnx for all help everyone! :)