home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
334.lha
/
DkbAnim
/
ChoosePalette.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-01-10
|
3KB
|
129 lines
#include <stdio.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <libraries/dos.h>
#define SCREEN_WIDTH 320L
#define SCREEN_HEIGHT 400L
#define BUFFER_SIZE 8096
UWORD ColourTbl[16] = { 0x000, 0x111, 0x222, 0x333, 0x444, 0x555, 0x666,
0x777, 0x888, 0x999, 0xaaa, 0xbbb, 0xccc, 0xddd,
0xeee, 0xfff };
#define extract_red(x) ((x & 0xF00) >> 8)
#define extract_green(x) ((x & 0x0F0) >> 4)
#define extract_blue(x) (x & 0x00F)
LONG last_y = -1;
extern int Close_Threshold;
FILE *fp, *palette_file;
main (argc, argv)
int argc;
char **argv;
{
unsigned int red, green, blue, i;
unsigned int width, height, x, y, line_number;
unsigned char red_buffer[SCREEN_WIDTH], green_buffer[SCREEN_WIDTH],
blue_buffer[SCREEN_WIDTH];
if ((argc != 2) && (argc != 3))
{
printf ("\nUsage: ChoosePalette <filename> <palette_file_name>\n");
exit(0);
}
Close_Threshold = 5;
fp = NULL;
palette_file = NULL;
if ((fp = fopen (argv[1], "r")) == NULL)
{
printf ("Cannot read input file\n");
exit(FALSE);
}
if ((palette_file = fopen (argv[2], "w")) == NULL)
{
printf ("Cannot create palette file\n");
exit (1);
}
width = (unsigned int) (getc(fp) & 0xFF);
width += ((unsigned int) (getc(fp) & 0xFF) * 256);
height = (unsigned int) (getc(fp) & 0xFF);
height += ((unsigned int) (getc(fp) & 0xFF) * 256);
if ((width > 320) || (height > 400)) {
printf ("\nError - picture too large\n");
fclose(fp);
fclose(palette_file);
exit (0);
}
printf ("Processing...\n");
start_recording_colours();
for (y = 0 ; y < height ; y++) {
/* Skip over the line number. It's not important at this point */
getc(fp);
getc(fp);
for (x = 0 ; x < width ; x++)
red_buffer[x] = getc(fp);
for (x = 0 ; x < width ; x++)
green_buffer[x] = getc(fp);
for (x = 0 ; x < width ; x++)
blue_buffer[x] = getc(fp);
for (x = 0 ; x < width ; x++)
{
red = red_buffer[x];
green = green_buffer[x];
blue = blue_buffer[x];
process (x, height - y, red, green, blue);
}
}
choose_palette();
for (i = 0 ; i < 16 ; i++) {
fprintf (palette_file, "%d %d %d\n",
extract_red(ColourTbl[i]),
extract_green(ColourTbl[i]),
extract_blue(ColourTbl[i]));
}
fclose(palette_file);
fclose (fp);
}
process (x, y, new_red, new_green, new_blue)
LONG x, y, new_red, new_green, new_blue;
{
LONG newline;
new_red &= 0xFF;
new_green &= 0xFF;
new_blue &= 0xFF;
new_red /= 16;
new_green /= 16;
new_blue /= 16;
newline = 0;
if (last_y != y) {
newline = 1;
last_y = y;
reset_colours();
}
record_colours (new_red, new_green, new_blue);
}