summaryrefslogtreecommitdiff
path: root/rgb_image.h
blob: 26b5d1473e9b4a1f05d5cde6398ea8070e6bb5a2 (plain)
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
/*----------------------------------------------------------------------------
** rgb_image.h
**  
**
**---------------------------------------------------------------------------
**  Copyright 2004 by CodeWeavers, Inc.
**
**     This program is free software; you can redistribute it and/or modify
**     it under the terms of the GNU General Public License as published by
**     the Free Software Foundation; either version 2 of the License, or
**     (at your option) any later version.
**
**     This program is distributed in the hope that it will be useful,
**     but WITHOUT ANY WARRANTY; without even the implied warranty of
**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**     GNU General Public License for more details.
**
**     You should have received a copy of the GNU General Public License
**     along with this program; if not, write to the Free Software
**     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
**
**--------------------------------------------------------------------------*/

#define SUCCESS                   0
#define ERR_PNG_FILE          1
#define ERR_MALLOC            2

/*----------------------------------------------------------------------------
**	Structure to act as rgb holster
**--------------------------------------------------------------------------*/
typedef struct _rgb
{
  short r;
  short g;
  short b;
} rgb;

/*----------------------------------------------------------------------------
**	Structure to store image information in rgb format
**--------------------------------------------------------------------------*/
typedef struct _rgb_image
{
  rgb **data;
  int width;
  int height;
  int bit_depth;
} rgb_image;

/*----------------------------------------------------------------------------
**	Structure to record the pixel format for an ximage
**--------------------------------------------------------------------------*/
typedef struct _pixel_format
{
  unsigned long r_mask;
  unsigned long g_mask;
  unsigned long b_mask;
  int r_count;
  int g_count;
  int b_count;
  int r_shift;
  int g_shift;
  int b_shift;
} pixel_format;

/*----------------------------------------------------------------------------
**	Structure to store a window's image and misc information
**--------------------------------------------------------------------------*/
typedef struct _win_image
{
  XImage *ximage;
  pixel_format pformat;
  int origin_x;
  int origin_y;
  int width;
  int height;
} win_image;

/*----------------------------------------------------------------------------
**	Structure to store an rgb histogram
**--------------------------------------------------------------------------*/
typedef struct _rgb_hist
{
  double r[256];
  double g[256];
  double b[256];
  int total_count;
  int width;
  int height;
} rgb_hist;

/*----------------------------------------------------------------------------
**	Function prototypes
**--------------------------------------------------------------------------*/
int win_image_to_rgb_hist(win_image *w_image, rgb_hist *r_hist);
int rgb_image_to_rgb_hist(rgb_image *r_image, rgb_hist *r_hist);
rgb_hist* rgb_hist_init();
void rgb_hist_destroy(rgb_hist *var);
void pixel_format_init(pixel_format *var);
void win_image_destroy_ximage(win_image *var);
void win_image_destroy(win_image *var);
win_image* win_image_init();
void rgb_image_destroy_data(rgb_image *var);
void rgb_image_destroy(rgb_image *var);
rgb_image* rgb_image_init();
int rgb_image_malloc(rgb_image *image, int width, int height);
int rgb_image_to_png(rgb_image *image, char *png_file);
int png_to_rgb_image(char *png_file, rgb_image *image);
void win_image_set_pixel_format(win_image *w_image);
void find_viewable_coords(int global_coord, int dpy_dimension, int win_dimension, int *origin_coord, int *adjusted_dimension);
void win_image_set_viewable_params(win_image *w_image, int global_x, int global_y, int display_width, int display_height, int win_width, int win_height);
int win_image_set_ximage(win_image *wimage, Display *display, Window win);
short convert_to_8bit(short pixel_component, int component_size);
int win_image_to_rgb_image(win_image *w_image, rgb_image *r_image);
int rgb_pixel_comparison(rgb *p1, rgb *p2, int err_margin);
int rgb_image_subimage_search (rgb_image *image, rgb_image *subimage, int err_margin, int x, int y);
int rgb_image_find_subimage(rgb_image *image, rgb_image *subimage, int err_margin, int *x, int *y);
int rgb_image_attach(rgb_image **main_image, rgb_image **attach_image, int count);