grit - GBA Raster Image Transmogrifier
Grit and its GUI version Wingrit are my image converters for the GBA (and NDS I guess). They can do most of the simple things like reading an image (pretty much any type of bitmap thanks to FreeImage) and converting it to binary data of various bitdepths which can be directly put into VRAM, but also more complicated matters such as tiling and metatiling (for 1D object mapping for example), making a tilemap along with a reduced tileset (or using an external tileset), popular map layouts, and compression compatible with the GBA's BIOS routines. The capability for an NDS alphabit has been added recently as well. Output can be C/asm arrays, raw binary, GBFS, and a RIFF-based format called GRF.
Not good enough? Well, the source code is available too, so you're free to modify it. The code should be platform independent right now, or at least very nearly so; the catch being that you might have add or remove some type definitions and maybe create your own makefile for compilation.
Documentation
grit-readme.txt, wingrit-readme.txt, Manuals,
Grit Downloads
Current version: 0.8.6
- 20100327: binary: grit-0.8.6.zip
- 20100327: source: grit-src-0.8.6.zip
- 20100327: demo project: grit-demo-0.8.6.zip
Previous versions
- 20100211: binary: grit-0.8.4.zip
- 20100211: source: grit-src-0.8.4.zip
- 20100211: demo project: grit-demo-0.8.4.zip
- 20081207: binary: grit-0.8.3.zip
- 20081207: source: grit-src-0.8.3.zip
- 20081207: demo project: grit-demo-0.8.3.zip
20 thoughts on “grit - GBA Raster Image Transmogrifier”
Pingback: Embedding graphics in the DS using grit
To make Grit compile with GCC 4.4, I had to make the following changes:
srcgrit/cli.cpp, line 11, add #include
srcgrit/grit_main.cpp, line 793, add a cast to first argument:
args.insert((strvec::iterator)&args[ii], files.begin(), files.end());
has anyone compiled grit on linux?
Because I'm getting this error when I try to compile on linux:
srcgrit/grit_main.cpp: 793: error: no matching function for call to 'std::vector<char*,std::allocator >::insert(char**, __gnu_cxx::__normal_iterator<char**, std::vector<char*, std::allocator > >, __gnu_cxx::__normal_iterator<char**, std::vector<char*, std::allocator > > >)
/usr/include/c++/4.3/bits/vector.tcc:94: note: candidates are: __gnu_cxx::__normal_iterator<typename std::_Vector_base::__normal_iterator<typename std::_Vector_base > std::vector::insert(__gnu_cxx::normal_iterator<typename std::_Vector_base::_Tp_alloc_type::pointer, std::vector >, const_Tp&) [with _Tp = char*, _Alloc = std::allocator]
C++ libs related?
I'm using gcc 4.3 but carl's fix mentioned above works.
Should've tried that, sorry!
Pingback: (Quick) Getting started: NDS Programming « embedded programming on the nds
Can't download the binary as it cannot be found... :(
Seems I misnamed the file, sorry. The link should work now.
I cannot compile grit on linux:
either it stops with
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lfreeimage
, indicating that libfreeimage is only bundled as Windows-dll.
having installed freeimage-3.13.1 via bugs.gentoo.org/show_bug.cgi?id=307487, compilations stops with
./libgrit.a(grit_xp.o): In function `grit_xp_h(GritRec*)':
grit_xp.cpp:(.text+0x1a6b): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libfreeimage.a(PluginEXR.o): In function `C_OStream::write(char const*, int)':
(.text+0x26a): undefined reference to `Iex::throwErrnoExc(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
and lots of other undefined references in libfreeimage.a (complete buildlog at
The makefile looks like you link statically on linux anyway, so how about bundling libfreeimage.a in a usable version as well ?
Unfortunately, I'm limited to Windows, so I can't really help much with linux. That's more wintermute's department. Unfortunately,
mkstemp()
isn't standard, which is why I'm usingtmpnam
. IIRC, the warning isn't that serious.The slew of errors in FreeImage looks like an improper build of the library, particularly of some of the sub-libraries it uses (libpng and libjpeg, for example). But again I can't built on linux, so there's little I can do here. This is also the reason I can't bundle a linux-usable libfreeimage.a – well, that and I don't know if it'll work for the various linuxes out there. I imagine if there were a one-size-fits-all that it'd have been included in the FreeImage distribution.
You may have better luck on the devkitPro forum.
Is there an installer for wingrit?
'Cause I keep getting an error message saying it was configured incorrectly and should reinstall...
You did something kind of silly when you where naming your classes in cldib... In cldib_wu.c and cldib_quant.h you use the WuQuantizer class which is the same name as freeimage which is WuQuantizer which ended up as a what I like to call a naming collision.
The fix is simple just change the name of WuQuantizer to some like this CldibWuQuantizer. This should get rid of the compiler linker error and it will compile to linux just fine. Here a list of files that need to be edited.
cldib_wu.cpp
cldib_quant.h
cldi_conv.cpp line 344
Is there a way of using transparency info in the png, to set the transparency of the loaded texture?
Alas, no.
It's something I've been meaning to do, but this is not a minor operation, and time has been kind of lacking :\
To get this working in CentOS 6, had to install freeimage-dev from EPEL, and make the following chagnes to the makefile:
LIBDIRS := .
change to
LIBDIRS := . /usr/lib/
$(CXX) $(LDFLAGS) -o $@ $(GRIT_OBJ) $(LIBPATHS) -lgrit -lcldib -lfreeimage
change to
$(CXX) $(LDFLAGS) -o $@ $(GRIT_OBJ) $(LIBPATHS) -lgrit -lcldib -shared -lfreeimage
-T
Note on compiling for OSX 10.6 and newer:
sudo port install freeimage
In Makefile change OSX section to:
ifneq (,$(findstring Darwin,$(UNAME)))
SDK := /Developer/SDKs/MacOSX10.6.sdk
OSXCFLAGS := -mmacosx-version-min=10.6 -isysroot $(SDK) -arch x86_64
OSXCXXFLAGS := $(OSXCFLAGS)
CXXFLAGS += -fvisibility=hidden
LDFLAGS += -mmacosx-version-min=10.6 -Wl,-syslibroot,$(SDK) -arch x86_64
endif
In Makefile, change LIBDIRS to:
LIBDIRS := . /opt/local/lib
Then make clean, make, and good to go!
Pingback: How do I display a 16-bit image on the screen? : Answers to your coding questions…
Just compiled on OS X 10.9 with instructions similar to the above comment. The SDK directory is now:
SDK := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
and also I used Homebrew instead of MacPorts to install libfreeimage, which places it in /usr/local/lib instead of /opt/local/lib, so I set LIBDIRS accordingly.
pandora sale the night before the first day of my final semester of college
chaussure homme zanotti www.topcruise.fr/zanottihomme.htm