amiga_imgv
annotate src/image.c @ 2:f75893a33234
hammer -> ham image converter
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 26 Oct 2017 10:04:29 +0300 |
parents | |
children | 663471a80c21 |
rev | line source |
---|---|
nuclear@0 | 1 #include <stdlib.h> |
nuclear@0 | 2 #include <string.h> |
nuclear@0 | 3 #include "image.h" |
nuclear@0 | 4 |
nuclear@0 | 5 struct ham_image *load_ham_image(const char *fname) |
nuclear@0 | 6 { |
nuclear@0 | 7 return 0; /* TODO */ |
nuclear@0 | 8 } |
nuclear@0 | 9 |
nuclear@0 | 10 struct ham_image *gen_ham_image(int w, int h, int nbpl) |
nuclear@0 | 11 { |
nuclear@0 | 12 int i, x, y; |
nuclear@0 | 13 struct ham_image *img; |
nuclear@0 | 14 unsigned char *pptr; |
nuclear@0 | 15 unsigned char pixval; |
nuclear@0 | 16 /*static const uint16_t defpal[] = { |
nuclear@0 | 17 0x000, 0xf00, 0xff0, 0x0f0, 0x0ff, 0x00f, 0xf0f, 0xfff, |
nuclear@0 | 18 0x444, 0x800, 0x880, 0x080, 0x088, 0x008, 0x808, 0x888 |
nuclear@0 | 19 };*/ |
nuclear@0 | 20 |
nuclear@0 | 21 if(!(img = malloc(sizeof *img))) { |
nuclear@0 | 22 return 0; |
nuclear@0 | 23 } |
nuclear@0 | 24 if(!(img->pixels = calloc(w * h / 8 * nbpl, 1))) { |
nuclear@0 | 25 free(img); |
nuclear@0 | 26 return 0; |
nuclear@0 | 27 } |
nuclear@0 | 28 img->width = w; |
nuclear@0 | 29 img->height = h; |
nuclear@0 | 30 img->chglist = 0; |
nuclear@0 | 31 |
nuclear@0 | 32 img->nbitplanes = nbpl; |
nuclear@0 | 33 /*memcpy(img->palette, defpal, sizeof defpal);*/ |
nuclear@0 | 34 for(i=0; i<16; i++) { |
nuclear@0 | 35 img->palette[i] = i | (i << 4) | (i << 8); |
nuclear@0 | 36 } |
nuclear@0 | 37 |
nuclear@0 | 38 pptr = img->pixels; |
nuclear@0 | 39 for(i=0; i<4; i++) { |
nuclear@0 | 40 pptr = img->pixels + i * w / 8; |
nuclear@0 | 41 for(y=0; y<h; y++) { |
nuclear@0 | 42 pixval = 0; |
nuclear@0 | 43 for(x=0; x<w; x++) { |
nuclear@0 | 44 pixval = (pixval >> 1) | ((((x ^ y) >> i) & 1) ? 0x80 : 0); |
nuclear@0 | 45 if((x & 7) == 7) { |
nuclear@0 | 46 *pptr++ = pixval; |
nuclear@0 | 47 pixval = 0; |
nuclear@0 | 48 } |
nuclear@0 | 49 } |
nuclear@0 | 50 pptr += w / 8 * (img->nbitplanes - 1); |
nuclear@0 | 51 } |
nuclear@0 | 52 } |
nuclear@0 | 53 |
nuclear@0 | 54 return img; |
nuclear@0 | 55 } |