home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 3
/
goldfish_volume_3.bin
/
files
/
fish
/
disks
/
d1104.lha
/
Programs
/
Image2C
/
i2c.doc
< prev
next >
Wrap
Text File
|
1995-03-19
|
6KB
|
161 lines
Image2C 1.2
Copyright © 1994,1995 Udo Schuermann
All rights reserved
This program converts an image in an IFF FORM ILBM to a 'C' struct Image
structure which you can use as part of your C programming projects. The
program is not intended (in its present form) for creation of sprites or
raw bitplane data, although you are welcome to improve it. If you do, I
would much appreciate if you sent me the revised code!
Image2C accomplishes a number of things which I have time and again found
to be important to me, but have somehow not found in quite the right form
elsewhere:
1. You get to specify your own "key" string on the command line by which
the source code's identifiers are prefixed. The program does not make
any "guesses." Whatever you specify is added as a prefix, and nothing
else. You can specify a null string, such as "" whereby no prefix is
added.
2. You get to specify exactly what you want included in the file. You can
also include everything and have the program add #ifdef/#endif around
the sections so you can define LATER what you want to actually use
without having to reconvert the image.
3. The program uses the iffparse.library as part of a demonstration of
how to extract image information. It was my goal to learn how to do
this properly, especially since CITAS 2.0 failed to properly handle
6-bitplane images (this was the ultimate reason why I wrote Image2'C')
4. Image2C adds the __chip identifier automatically, unless you specify
the NOCHIP flag. This permits you to store image data in Fast RAM,
and use some pen-remapping functions to recolor the image; the new
image would then end up in Chip RAM without having the original waste
space there.
5. The information is nicely and intelligently formatted. No mess! :-)
It should, therefore, be easy to understand (i.e. makes a good learning
tool) and, depending on your own skill, easy to modify, too!
In its simplest form, Image2C could be used as part of a Makefile in the
following manner:
---------------------------------------------------------------------------
MyImages.o: Image1.c Image2.c Image3.c Image4.c\
Image5.c Image6.c Image7.c\
MyImages.c
sc MyImages.c
Image1.c: Image1.IFF
i2c Image1.IFF Image1_ >Image1.c
Image2.c: Image2.IFF
i2c Image2.IFF Image2_ >Image2.c
Image3.c: Image3.IFF
i2c Image3.IFF Image3_ >Image3.c
...etc.
---------------------------------------------------------------------------
Your file MyImages.c could be something as simple as this:
---------------------------------------------------------------------------
#include "MyImage1.c"
#include "MyImage2.c"
#include "MyImage3.c"
...etc.
---------------------------------------------------------------------------
Now you can modify your .IFF files to your heart's content and each time
you run 'smake' (or make) all altered .IFF files will be reconverted to .c
files with unique "ImageX_" prefixes in their headers.
The program uses the following CLI template. I am parsing this on my own,
without help from the system's own libraries (so shoot me!)
ILBMFILE/A,SYMPREFIX/A,NOINFO/S,NOPENS/S,NODATA/S,NOIMAGESTRUCT/S,
NORGB4/S,USEIFDEFS/S,NOCHIP/S
ILBMFILE/A Must always be given. This is the IFF ILBM input
file to be converted. I2C supports images up to
8 bitplanes deep (actually, any bitplane oriented
ILBM)
SYMPREFIX/A Must always be given. The symbol prefix for this
image file. This forms the prefix to all symbols
in the file.
Example: A prefix of "myImage_" will generate
symbols such as "UWORD myImage_ImageData[]"
NOINFO/S This switch will cause image information, such
such as height, width, depth, number of colors
to be omitted. See also NOIMAGESTRUCT below!
NOPENS/S This switch will cause pens (used by LoadRGB32()
for example) to be omitted.
NODATA/S This switch will cause the actual image data to
be omitted. See also NOIMAGESTRUCT below!
NOIMAGESTRUCT/S This switch will cause a "struct Image ..." item
to be omitted. This item requires the presence
of INFO and DATA items; if you specify that either
or both of those should not be included (NOINFO
and/or NODATA) but you do not also specify the
NOIMAGESTRUCT, then I2C will reverse your decision
on NOINFO and/or NODATA so that the Image struct
can be built.
ADDRGB4/S This switch will cause register color values to
be added. Such values are 12-bit only and are
probably of use only for older software. It is
for this reason that this is the only switch that
needs to be specified to add something to the
code; i.e. if not specified you will NOT get the
information for this item.
USEIFDEFS/S This switch encloses the INFO, PENS, DATA, IMG,
and RGB4 sections with #ifdef/#endif constructs
to allow you to build a source file with ALL
information, but decide at a later time which
portions the compiler should include or ignore.
Use of this switch enables an additional level
of flexibility, which you may or may not find
of use.
The following #define statements used BEFORE you
#include the source code generated by I2C will
tell the compiler which portions of the file to
use and which to ignore:
#define I2C_IMAGE_INFO Accept image info
#define I2C_IMAGE_PENS Accept RGB32 pens
#define I2C_IMAGE_RGB4 Accept 4-bit pens
#define I2C_IMAGE_DATA Accept image data
#define I2C_IMAGE_IMG Accept struct Image
NOCHIP/S Omit the __chip attribute on structures. This may
be desirable if you are going to remap image colors
anyway and won't be needing the original in chip
RAM.
If you are not clear on some of the points described above, you are hereby
STRONGLY advised to run the program on a test image and see what the
resulting output file contains. Try this:
I2C TestImage.IFF MyTest_ USEIFDEFS
Some limitations:
· Image2C does not support optimization to eliminate bit planes of all
1's or all 0's.
Cheers!
._. Udo Schuermann
( ) walrus@wam.umd.edu