20 signed short int *
map;
27 #define gm_index(gm, x, y) (&(gm)->map[(x)+(y)*(ptrdiff_t)(gm)->w]) 28 #define gm_safe(gm, x, y) ((int)(x)>=0 && (int)(x)<(gm)->w && (int)(y)>=0 && (int)(y)<(gm)->h) 29 #define gm_bound(x, m) ((x)<0 ? 0 : (x)>=(m) ? (m)-1 : (x)) 30 #define GM_UGET(gm, x, y) (*gm_index(gm, x, y)) 31 #define GM_UINC(gm, x, y, b) (*gm_index(gm, x, y) += (short int)(b)) 32 #define GM_UINV(gm, x, y) (*gm_index(gm, x, y) = 255 - *gm_index(gm, x, y)) 33 #define GM_UPUT(gm, x, y, b) (*gm_index(gm, x, y) = (short int)(b)) 34 #define GM_GET(gm, x, y) (gm_safe(gm, x, y) ? GM_UGET(gm, x, y) : 0) 35 #define GM_INC(gm, x, y, b) (gm_safe(gm, x, y) ? GM_UINC(gm, x, y, b) : 0) 36 #define GM_INV(gm, x, y) (gm_safe(gm, x, y) ? GM_UINV(gm, x, y) : 0) 37 #define GM_PUT(gm, x, y, b) (gm_safe(gm, x, y) ? GM_UPUT(gm, x, y, b) : 0) 38 #define GM_BGET(gm, x, y) GM_UGET(gm, gm_bound(x, gm->w), gm_bound(y, gm->h)) 44 #define GM_MODE_NONZERO 1 46 #define GM_MODE_POSITIVE 3 47 #define GM_MODE_NEGATIVE 4
int gm_read(FILE *f, greymap_t **gmp)
greymap_t * gm_dup(greymap_t *gm)
int gm_writepgm(FILE *f, greymap_t *gm, char *comment, int raw, int mode, double gamma)
greymap_t * gm_new(int w, int h)
void gm_clear(greymap_t *gm, int b)
void gm_free(greymap_t *gm)
int gm_print(FILE *f, greymap_t *gm)