1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
Uint8 get_color(SDL_Surface *s, int x, int y) {
return ((Uint8*)s->pixels)[y*s->pitch+x];
}
Uint8 get_alpha(SDL_Surface *s, int x, int y) {
return s->format->palette->colors[((Uint8*)s->pixels)[y*s->pitch+x]].r;
}
void getpixel(Uint16 z, Uint8 fx, Uint16 x, Uint16 y,
FILE *out, SDL_Surface *col, SDL_Surface *msk)
{
if (fx)
x = 39 - x;
y = z + y;
Uint8 c;
c = get_color(col, x, y);
fwrite(&c, 1, 1, out);
c = get_alpha(msk, x, y);
fwrite(&c, 1, 1, out);
}
void get(Uint16 z, Uint8 fx, FILE *out, SDL_Surface *col, SDL_Surface *msk)
{
unsigned short x, y;
for (y = 0; y < 40; y++)
for (x = 0; x < 40; x++) {
getpixel(z, fx, x, y, out, col, msk);
}
}
void write_palette(FILE *out, SDL_Surface *s) {
int i;
Uint8 c = s->format->palette->ncolors - 1;
fwrite(&c, 1, 1, out);
for (i = 0; i < s->format->palette->ncolors; i++) {
fwrite(&s->format->palette->colors[i].r, 1, 1, out);
fwrite(&s->format->palette->colors[i].g, 1, 1, out);
fwrite(&s->format->palette->colors[i].b, 1, 1, out);
}
}
int main()
{
SDL_Surface * colors = IMG_LoadPNG_RW(SDL_RWFromFile("dude_colors.png", "rb"));
SDL_Surface * mask = IMG_LoadPNG_RW(SDL_RWFromFile("dude_mask.png", "rb"));
FILE *outp = fopen("dude.dat", "wb");
write_palette(outp, colors);
get( 0 * 40, 0, outp, colors, mask);
get( 1 * 40, 0, outp, colors, mask);
get( 2 * 40, 0, outp, colors, mask);
get( 3 * 40, 0, outp, colors, mask);
get( 4 * 40, 0, outp, colors, mask);
get( 5 * 40, 0, outp, colors, mask);
get( 6 * 40, 0, outp, colors, mask);
get( 7 * 40, 0, outp, colors, mask);
get( 8 * 40, 0, outp, colors, mask);
get( 9 * 40, 0, outp, colors, mask);
get(10 * 40, 0, outp, colors, mask);
get(11 * 40, 0, outp, colors, mask);
get(12 * 40, 0, outp, colors, mask);
get(13 * 40, 0, outp, colors, mask);
get(14 * 40, 0, outp, colors, mask);
get(15 * 40, 0, outp, colors, mask);
get(16 * 40, 0, outp, colors, mask);
get(17 * 40, 0, outp, colors, mask);
get(18 * 40, 0, outp, colors, mask);
get(19 * 40, 0, outp, colors, mask);
get(20 * 40, 0, outp, colors, mask);
get(21 * 40, 0, outp, colors, mask);
get(22 * 40, 0, outp, colors, mask);
get(23 * 40, 0, outp, colors, mask);
get(24 * 40, 0, outp, colors, mask);
get(25 * 40, 0, outp, colors, mask);
get(26 * 40, 0, outp, colors, mask);
get(27 * 40, 0, outp, colors, mask);
get(28 * 40, 0, outp, colors, mask);
get(29 * 40, 0, outp, colors, mask);
get(30 * 40, 0, outp, colors, mask);
get(31 * 40, 0, outp, colors, mask);
get(32 * 40, 0, outp, colors, mask);
get(33 * 40, 0, outp, colors, mask);
get(34 * 40, 0, outp, colors, mask);
get(35 * 40, 0, outp, colors, mask);
get(36 * 40, 0, outp, colors, mask);
get( 0 * 40, 1, outp, colors, mask);
get( 1 * 40, 1, outp, colors, mask);
get( 2 * 40, 1, outp, colors, mask);
get( 3 * 40, 1, outp, colors, mask);
get( 4 * 40, 1, outp, colors, mask);
get( 5 * 40, 1, outp, colors, mask);
get( 6 * 40, 1, outp, colors, mask);
get( 7 * 40, 1, outp, colors, mask);
get( 8 * 40, 1, outp, colors, mask);
get( 9 * 40, 1, outp, colors, mask);
get(10 * 40, 1, outp, colors, mask);
get(11 * 40, 1, outp, colors, mask);
get(12 * 40, 1, outp, colors, mask);
get(13 * 40, 1, outp, colors, mask);
get(14 * 40, 1, outp, colors, mask);
get(15 * 40, 1, outp, colors, mask);
get(16 * 40, 1, outp, colors, mask);
get(17 * 40, 1, outp, colors, mask);
get(18 * 40, 1, outp, colors, mask);
get(19 * 40, 1, outp, colors, mask);
get(20 * 40, 1, outp, colors, mask);
get(21 * 40, 1, outp, colors, mask);
get(22 * 40, 1, outp, colors, mask);
get(23 * 40, 1, outp, colors, mask);
get(24 * 40, 1, outp, colors, mask);
get(25 * 40, 1, outp, colors, mask);
get(26 * 40, 1, outp, colors, mask);
get(27 * 40, 1, outp, colors, mask);
get(28 * 40, 1, outp, colors, mask);
get(29 * 40, 1, outp, colors, mask);
get(30 * 40, 1, outp, colors, mask);
get(31 * 40, 1, outp, colors, mask);
get(32 * 40, 1, outp, colors, mask);
get(33 * 40, 1, outp, colors, mask);
get(34 * 40, 1, outp, colors, mask);
get(35 * 40, 1, outp, colors, mask);
get(36 * 40, 1, outp, colors, mask);
fclose(outp);
}
|