52 int x1,
int y1,
int x2,
int y2,
int x3,
int y3,
int colour);
79 unsigned char *ptr = input;
88 for (y = 0; y < h; ++y)
89 for (x = 0; x < w; ++x, ++ptr) {
90 bayer = (x&1?0:1) + (y&1?0:2);
99 output[i+colour] = *ptr;
109 for (y = 0; y < h; ++y, ptr+=w)
110 for (x = 0; x < w; ++x) {
111 bayer = (x&1?0:1) + (y&1?0:2);
120 output[i+colour] = (x&1)? ptr[x>>1]:ptr[(w>>1)+(x>>1)];
128 #define AD(x, y, w) ((y)*(w)*3+3*(x))
155 p0 = 0; p1 = 1; p2 = 2;
159 p0 = 1; p1 = 0; p2 = 3;
163 p0 = 3; p1 = 2; p2 = 1;
167 p0 = 2; p1 = 3; p2 = 0;
171 for (y = 0; y < h; y++)
172 for (x = 0; x < w; x++) {
173 bayer = (x&1?0:1) + (y&1?0:2);
179 gp_bayer_accrue(image, w, h, x-1, y, x+1, y, x, y-1, x, y+1,
GREEN) ;
182 gp_bayer_accrue(image, w, h, x+1, y+1, x-1, y-1, x-1, y+1, x+1, y-1,
BLUE) ;
184 }
else if (bayer == p1) {
189 value += image[
AD(x+1,y,w)+
RED];
193 value += image[
AD(x-1,y,w)+
RED];
196 image[
AD(x,y,w)+
RED] = value / div;
200 value += image[
AD(x,y+1,w)+
BLUE];
204 value += image[
AD(x,y-1,w)+
BLUE];
207 image[
AD(x,y,w)+
BLUE] = value / div;
209 }
else if ( bayer == p2 ) {
215 value += image[
AD(x+1,y,w)+
BLUE];
219 value += image[
AD(x-1,y,w)+
BLUE];
222 image[
AD(x,y,w)+
BLUE] = value / div;
226 value += image[
AD(x,y+1,w)+
RED];
230 value += image[
AD(x,y-1,w)+
RED];
233 image[
AD(x,y,w)+
RED] = value / div;
239 gp_bayer_accrue (image, w, h, x-1, y, x+1, y, x, y-1, x, y+1,
GREEN) ;
241 image[
AD(x,y,w)+
RED] =
242 gp_bayer_accrue (image, w, h, x+1, y+1, x-1, y-1, x-1, y+1, x+1, y-1,
RED) ;
260 int x1,
int y1,
int x2,
int y2,
int x3,
int y3,
int colour)
269 x[0] = x0 ; x[1] = x1 ; x[2] = x2 ; x[3] = x3 ;
270 y[0] = y0 ; y[1] = y1 ; y[2] = y2 ; y[3] = y3 ;
273 counter = sum_of_values = 0 ;
282 for (i = 0 ; i < 4 ; i++)
283 {
if ((x[i] >= 0) && (x[i] < w) && (y[i] >= 0) && (y[i] < h))
285 value [i] = image[
AD(x[i],y[i],w) + colour] ;
301 hdiff = value [1] - value [0] ;
303 vdiff = value [3] - value [2] ;
308 return (value [3] + value [2])/2 ;
313 return (value [1] + value [0])/2 ;
322 counter = sum_of_values = 0 ;
323 for (i = 0 ; i < 4 ; i++)
324 {
if ((x[i] >= 0) && (x[i] < w) && (y[i] >= 0) && (y[i] < h))
325 { value [i] = image[
AD(x[i],y[i],w) + colour] ;
326 sum_of_values += value [i] ;
330 average = sum_of_values / counter ;
331 if (counter < 4)
return average ;
334 for (i = 0 ; i < 4 ; i++)
335 { above[i] = value[i] > average ;
336 if (above[i]) counter++ ;
339 if ((counter == 2) || (counter == 0))
return average ;
341 for (i = 0 ; i < 4 ; i++)
342 {
if ((counter == 3) == above[i])
343 { sum_of_values += value[i] ; }
345 return sum_of_values / 3 ;