OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
greymap.h
Go to the documentation of this file.
1 /* Copyright (C) 2001-2015 Peter Selinger.
2  This file is part of Potrace. It is free software and it is covered
3  by the GNU General Public License. See the file COPYING for details. */
4 
5 
6 #ifndef GREYMAP_H
7 #define GREYMAP_H
8 
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <stddef.h>
12 
13 /* internal format for greymaps. Note: in this format, rows are
14  ordered from bottom to top. The pixels in each row are given from
15  left to right. */
16 
17 struct greymap_s {
18  int w; /* width, in pixels */
19  int h; /* height, in pixels */
20  signed short int *map; /* raw data, w*h values */
21 };
22 typedef struct greymap_s greymap_t;
23 
24 /* macros for accessing pixel at index (x,y). Note that the origin is
25  in the *lower* left corner. U* macros omit the bounds check. */
26 
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))
39 
40 /* modes for cutting off out-of-range values. The following names
41  refer to winding numbers. I.e., make a pixel black if winding
42  number is nonzero, odd, or positive, respectively. We assume that 0
43  winding number corresponds to white (255). */
44 #define GM_MODE_NONZERO 1
45 #define GM_MODE_ODD 2
46 #define GM_MODE_POSITIVE 3
47 #define GM_MODE_NEGATIVE 4
48 
49 extern char *gm_read_error;
50 
51 greymap_t *gm_new(int w, int h);
53 void gm_free(greymap_t *gm);
54 void gm_clear(greymap_t *gm, int b);
55 int gm_read(FILE *f, greymap_t **gmp);
56 int gm_writepgm(FILE *f, greymap_t *gm, char *comment, int raw, int mode, double gamma);
57 int gm_print(FILE *f, greymap_t *gm);
58 
59 #endif /* GREYMAP_H */
int h
Definition: greymap.h:19
char * gm_read_error
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)
signed short int * map
Definition: greymap.h:20
int w
Definition: greymap.h:18
void gm_clear(greymap_t *gm, int b)
void gm_free(greymap_t *gm)
int gm_print(FILE *f, greymap_t *gm)