redeye 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8bea79161aeebd27cfd7fda855e10193fc263c7
4
- data.tar.gz: b90cac02c0bc02c3fc244898beeb3adf92c686b1
3
+ metadata.gz: 14edbfbfa5f297a73aea39eae3813550cc4f9d02
4
+ data.tar.gz: db0a0e1e5b1e83e9247fb945a087ce0493911cef
5
5
  SHA512:
6
- metadata.gz: 1628f8ae1003705f0ee31bfd0cedb7e386f8e5c643844d212465f78dd1dd031997155baf1044d56d74b4b734c46d605eb75aa50932e46f7d7394febb04be989d
7
- data.tar.gz: f4d95dc6ce53c3d26fd117175d7aef1964a74ddce47fc64efd366513fca2e83828654c1a63e8161674ae2d0fb69ff8acda8b8689e229ef498c1f0ff3fd9ad55a
6
+ metadata.gz: bf5b50e6a59a95004483cf830dec668d4667e5f6decf28dd13636c30626be3b5af4431de6341d484c1cbfe22f086955fe920af0589b56c5d310e28698620ecd8
7
+ data.tar.gz: f155537cc657d438dce1a154dc91ffd24f5d73d4513a62c1f25fc62ea5714d8875322cbd40bf05bf740d38df0aae83b9d7afa91efc852f2ae91912587734e771
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ spec = Gem::Specification.new do |s|
22
22
  s.name = "redeye"
23
23
  s.author = "Geoff Youngs"
24
24
  s.email = "git@intersect-uk.co.uk"
25
- s.version = "1.0.2"
25
+ s.version = "1.0.3"
26
26
  s.homepage = "http://github.com/geoffyoungs/redeye"
27
27
  s.summary = "Redeye correction for Gdk::Pixbuf"
28
28
  s.add_dependency("rubber-generate", ">= 0.0.17")
@@ -19,7 +19,7 @@ end
19
19
  # Look for headers in {gem_root}/ext/{package}
20
20
  if use_gems
21
21
  %w[
22
- glib2 gdk_pixbuf2 atk gtk2].each do |package|
22
+ glib2].each do |package|
23
23
  require package
24
24
  if Gem.loaded_specs[package]
25
25
  $CFLAGS += " -I" + Gem.loaded_specs[package].full_gem_path + "/ext/" + package
@@ -40,8 +40,15 @@ end
40
40
 
41
41
  $CFLAGS += " -I."
42
42
  have_func("rb_errinfo")
43
- PKGConfig.have_package("gtk+-2.0") or exit(-1)
44
- have_header("gdk-pixbuf/gdk-pixbuf.h") or exit(-1)
43
+ PKGConfig.have_package("gdk-pixbuf-2.0") or exit(-1)
44
+
45
+ unless have_header("gdk-pixbuf/gdk-pixbuf.h")
46
+ paths = Gem.find_files("gdk-pixbuf/gdk-pixbuf.h")
47
+ paths.each do |path|
48
+ $CFLAGS += " '-I#{File.dirname(path)}'"
49
+ end
50
+ have_header("gdk-pixbuf/gdk-pixbuf.h") or exit -1
51
+ end
45
52
 
46
53
  STDOUT.print("checking for new allocation framework... ") # for ruby-1.7
47
54
  if Object.respond_to? :allocate
data/ext/redeye/redeye.c CHANGED
@@ -1,9 +1,14 @@
1
1
  #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
2
- /* Includes */
3
- #include <ruby.h>
4
- #include <stdlib.h>
5
- #include <stdio.h>
6
- #include <string.h>
2
+ /* Includes */
3
+ #include <ruby.h>
4
+ #include <stdlib.h>
5
+ #include <stdio.h>
6
+ #include <string.h>
7
+ #if defined GCC
8
+ #define OPTIONAL_ATTR __attribute__((unused))
9
+ #else
10
+ #define OPTIONAL_ATTR
11
+ #endif
7
12
  #include "gdk-pixbuf/gdk-pixbuf.h"
8
13
 
9
14
  /* Setup types */
@@ -14,39 +19,23 @@ typedef int rubber_bool;
14
19
  /* Prototypes */
15
20
  #include "rbglib.h"
16
21
 
17
- #include "rbgtk.h"
18
-
19
- #if defined(G_PLATFORM_WIN32) && !defined(RUBY_GTK2_STATIC_COMPILATION)
20
- # ifdef RUBY_GTK2_COMPILATION
21
- # define RUBY_GTK2_VAR __declspec(dllexport)
22
- # else
23
- # define RUBY_GTK2_VAR extern __declspec(dllimport)
24
- # endif
25
- #else
26
- # define RUBY_GTK2_VAR extern
27
- #endif
28
-
29
- RUBY_GTK2_VAR VALUE mGtk;
30
- RUBY_GTK2_VAR VALUE mGdk;
31
-
32
- #define RBGTK_INITIALIZE(obj,gtkobj) (rbgtk_initialize_gtkobject(obj, GTK_OBJECT(gtkobj)))
33
22
  static VALUE cRedEye;
34
23
  static VALUE
35
- RedEye___alloc__(VALUE self);
24
+ RedEye___alloc__(VALUE self OPTIONAL_ATTR );
36
25
  static VALUE
37
- RedEye_initialize(VALUE self, VALUE __v_pixbuf, VALUE __v_minX, VALUE __v_minY, VALUE __v_maxX, VALUE __v_maxY);
26
+ RedEye_initialize(VALUE self OPTIONAL_ATTR , VALUE __v_pixbuf OPTIONAL_ATTR, VALUE __v_minX OPTIONAL_ATTR, VALUE __v_minY OPTIONAL_ATTR, VALUE __v_maxX OPTIONAL_ATTR, VALUE __v_maxY OPTIONAL_ATTR);
38
27
  static VALUE
39
28
  RedEye_identify_blobs(int __p_argc, VALUE *__p_argv, VALUE self);
40
29
  static VALUE
41
- RedEye_correct_blob(VALUE self, VALUE __v_blob_id);
30
+ RedEye_correct_blob(VALUE self OPTIONAL_ATTR , VALUE __v_blob_id OPTIONAL_ATTR);
42
31
  static VALUE
43
32
  RedEye_highlight_blob(int __p_argc, VALUE *__p_argv, VALUE self);
44
33
  static VALUE
45
34
  RedEye_preview_blob(int __p_argc, VALUE *__p_argv, VALUE self);
46
35
  static VALUE
47
- RedEye_preview(VALUE self);
36
+ RedEye_preview(VALUE self OPTIONAL_ATTR );
48
37
  static VALUE
49
- RedEye_pixbuf(VALUE self);
38
+ RedEye_pixbuf(VALUE self OPTIONAL_ATTR );
50
39
  static VALUE structRegion;
51
40
 
52
41
  /* Inline C code */
@@ -80,59 +69,59 @@ typedef struct {
80
69
 
81
70
  #define MIN_RED_VAL 20
82
71
 
83
- static inline VALUE
72
+ static inline VALUE
84
73
  unref_pixbuf(GdkPixbuf *pixbuf)
85
74
  {
86
75
  volatile VALUE pb = Qnil;
87
-
76
+
88
77
  pb = GOBJ2RVAL(pixbuf);
89
-
78
+
90
79
  g_object_unref(pixbuf);
91
-
80
+
92
81
  return pb;
93
82
  }
94
83
 
95
84
  static void identify_possible_redeye_pixels(redeyeop_t *op,
96
85
  double green_sensitivity, double blue_sensitivity,
97
- int min_red_val)
86
+ int min_red_val)
98
87
  {
99
88
  guchar *data = gdk_pixbuf_get_pixels(op->pixbuf);
100
89
  int rowstride = gdk_pixbuf_get_rowstride(op->pixbuf);
101
90
  int pixWidth = gdk_pixbuf_get_has_alpha(op->pixbuf) ? 4 : 3;
102
-
91
+
103
92
  int y, ry = 0, x, rx = 0;
104
93
  for ( y = op->area.minY; y < op->area.maxY; y++ )
105
94
  {
106
95
  guchar *thisLine = data + (rowstride * y);
107
96
  guchar *pixel;
108
-
97
+
109
98
  pixel = thisLine + (op->area.minX * pixWidth);
110
99
  rx = 0;
111
-
100
+
112
101
  for ( x = op->area.minX; x < op->area.maxX; x++ )
113
102
  {
114
-
103
+
115
104
  int r,g,b;
116
-
105
+
117
106
  r = pixel[0];
118
107
  g = pixel[1];
119
108
  b = pixel[2];
120
-
109
+
121
110
  gboolean threshMet;
122
-
123
- threshMet = (((double)r) > (green_sensitivity * (double)g)) &&
124
- (((double)r) > (blue_sensitivity * (double)b)) &&
111
+
112
+ threshMet = (((double)r) > (green_sensitivity * (double)g)) &&
113
+ (((double)r) > (blue_sensitivity * (double)b)) &&
125
114
  (r > min_red_val);
126
-
115
+
127
116
  if(threshMet)
128
117
  op->mask[ rx + ry ] = r;
129
118
  else
130
119
  op->mask[ rx + ry ] = 0; /* MEMZERO should have done its job ? */
131
-
120
+
132
121
  pixel += pixWidth;
133
122
  rx ++;
134
123
  }
135
-
124
+
136
125
  ry += op->area.width;
137
126
  }
138
127
  }
@@ -141,17 +130,17 @@ static void identify_possible_redeye_pixels(redeyeop_t *op,
141
130
  inline int group_at(redeyeop_t *op, int px, int py)
142
131
  {
143
132
  int index, region;
144
-
133
+
145
134
  if (px < 0 || py < 0)
146
135
  return 0;
147
-
136
+
148
137
  index = px + ( py * op->area.width );
149
-
138
+
150
139
  if (index < 0)
151
140
  return 0;
152
141
  if (index > (op->area.width * op->area.height))
153
142
  return 0;
154
-
143
+
155
144
  region = op->regions.data[ index ];
156
145
  if (region > 0) {
157
146
  if (op->regions.region[ region ].mergeWith) {
@@ -166,11 +155,11 @@ inline int group_at(redeyeop_t *op, int px, int py)
166
155
 
167
156
  #define group_for(x,y) group_at(op, x, y)
168
157
 
169
- static void identify_blob_groupings(redeyeop_t *op)
158
+ static void identify_blob_groupings(redeyeop_t *op)
170
159
  {
171
160
  volatile int next_blob_id = 1, blob_id, y, x;
172
-
173
-
161
+
162
+
174
163
  for( y = 0; y < op->area.height; y++ )
175
164
  {
176
165
  for ( x = 0; x < op->area.width; x++ )
@@ -180,28 +169,28 @@ static void identify_blob_groupings(redeyeop_t *op)
180
169
  int sx, sy, group = 0;
181
170
  // Target pixel is true
182
171
  blob_id = 0;
183
-
172
+
184
173
  for (sy = y; sy >= y - 1; sy --) {
185
174
  sx = (sy == y) ? x : x + 1;
186
175
  for (; sx >= (x - 1); sx --) {
187
176
  /*if ((sx >= x) && (sy >= y))
188
177
  goto blob_scan_done;*/
189
-
178
+
190
179
  if (sx >= 0 && sy >= 0)
191
180
  group = group_for(sx, sy);
192
-
181
+
193
182
  if (group) {
194
183
  existing = TRUE;
195
184
  if (blob_id) {
196
185
  int target = MIN(blob_id, group);
197
186
  int from = MAX(blob_id, group);
198
-
187
+
199
188
  if (op->regions.region[target].mergeWith > 0) {
200
189
  // Already merged
201
190
  target = op->regions.region[target].mergeWith;
202
191
  }
203
192
  op->regions.region[from].mergeWith = target;
204
-
193
+
205
194
  // Merge blob_id & group
206
195
  }
207
196
  blob_id = group;
@@ -220,38 +209,38 @@ static void identify_blob_groupings(redeyeop_t *op)
220
209
  op->regions.region[blob_id].height = 1;
221
210
  op->regions.region[blob_id].noPixels = 1;
222
211
  op->regions.region[blob_id].mergeWith = 0;
223
-
212
+
224
213
  next_blob_id ++;
225
214
  op->regions.len = next_blob_id;
226
-
215
+
227
216
  if (next_blob_id >= op->regions.size) {
228
217
  int extra, new_size;
229
-
218
+
230
219
  /*
231
220
  * Realloc in increasingly large chunks to reduce memory fragmentation
232
221
  */
233
222
  extra = op->regions.size;
234
223
  new_size = op->regions.size + extra;
235
-
224
+
236
225
  REALLOC_N(op->regions.region, region_info, new_size);
237
-
226
+
238
227
  op->regions.size = new_size;
239
228
  }
240
229
  }
241
-
242
- if (existing)
230
+
231
+ if (existing)
243
232
  {
244
233
  op->regions.region[blob_id].minX = MIN(x, op->regions.region[blob_id].minX);
245
234
  op->regions.region[blob_id].maxX = MAX(x, op->regions.region[blob_id].maxX);
246
235
  op->regions.region[blob_id].minY = MIN(y, op->regions.region[blob_id].minY);
247
236
  op->regions.region[blob_id].maxY = MAX(y, op->regions.region[blob_id].maxY);
248
- op->regions.region[blob_id].width = op->regions.region[blob_id].maxX -
237
+ op->regions.region[blob_id].width = op->regions.region[blob_id].maxX -
249
238
  op->regions.region[blob_id].minX + 1;
250
- op->regions.region[blob_id].height = op->regions.region[blob_id].maxY -
239
+ op->regions.region[blob_id].height = op->regions.region[blob_id].maxY -
251
240
  op->regions.region[blob_id].minY + 1;
252
241
  op->regions.region[blob_id].noPixels ++;
253
242
  }
254
-
243
+
255
244
  op->regions.data[ x + (y * op->area.width) ] = blob_id;
256
245
  }
257
246
  }
@@ -264,14 +253,14 @@ static void identify_blob_groupings(redeyeop_t *op)
264
253
  /*
265
254
  if (op->regions.len <= 0xf || 1)
266
255
  {
267
- if (g == 0)
256
+ if (g == 0)
268
257
  fprintf(fp, " ");
269
258
  else
270
259
  fprintf(fp, "%x", g);
271
260
  }
272
261
  else
273
262
  {
274
- if (g == 0)
263
+ if (g == 0)
275
264
  fprintf(fp, " ");
276
265
  else
277
266
  fprintf(fp, "%x ", g);
@@ -311,23 +300,23 @@ static void free_redeye(redeyeop_t *ptr)
311
300
  inline gboolean in_region(redeyeop_t *op, int x, int y, int blob_id)
312
301
  {
313
302
  int index;
314
-
303
+
315
304
  if ( x < op->area.minX || x > op->area.maxX ||
316
305
  y < op->area.minY || y > op->area.maxY )
317
306
  return FALSE;
318
-
307
+
319
308
  index = (x - op->area.minX) + ((y - op->area.minY) * op->area.width);
320
-
309
+
321
310
  return op->regions.data[index] == blob_id;
322
311
  }
323
312
 
324
313
  inline double alpha_level_for_pixel(redeyeop_t *op, int x, int y, int blob_id)
325
314
  {
326
315
  int j = 0, c = 0, xm, ym;
327
-
316
+
328
317
  if (in_region(op, x, y, blob_id))
329
318
  return 1.0;
330
-
319
+
331
320
  for ( xm = -2; xm <= 2; xm++ )
332
321
  {
333
322
  for ( ym = -2; ym <= 2; ym ++ )
@@ -339,7 +328,7 @@ inline double alpha_level_for_pixel(redeyeop_t *op, int x, int y, int blob_id)
339
328
  j ++;
340
329
  }
341
330
  }
342
-
331
+
343
332
  return ((double)j)/((double)c);
344
333
  }
345
334
 
@@ -348,7 +337,7 @@ inline char col(double val)
348
337
  if (val < 0) return 0;
349
338
  if (val > 255) return 255;
350
339
  return val;
351
-
340
+
352
341
  }
353
342
 
354
343
  static GdkPixbuf *redeye_preview(redeyeop_t *op, gboolean reset)
@@ -356,27 +345,27 @@ static GdkPixbuf *redeye_preview(redeyeop_t *op, gboolean reset)
356
345
  int width, height;
357
346
  width = op->area.width;
358
347
  height = op->area.height;
359
-
348
+
360
349
  if (width + op->area.minX > gdk_pixbuf_get_width(op->pixbuf)) {
361
350
  width = gdk_pixbuf_get_width(op->pixbuf) - op->area.minX;
362
351
  }
363
352
  if (height + op->area.minY > gdk_pixbuf_get_height(op->pixbuf)) {
364
353
  height = gdk_pixbuf_get_height(op->pixbuf) - op->area.minY;
365
354
  }
366
-
367
- if ( op->preview == NULL )
355
+
356
+ if ( op->preview == NULL )
368
357
  {
369
358
  GdkPixbuf *sub = NULL;
370
- sub = gdk_pixbuf_new_subpixbuf(op->pixbuf, op->area.minX, op->area.minY,
359
+ sub = gdk_pixbuf_new_subpixbuf(op->pixbuf, op->area.minX, op->area.minY,
371
360
  width, height);
372
-
361
+
373
362
  op->preview = gdk_pixbuf_copy(sub);
374
363
  g_object_unref(sub);
375
364
  } else if (reset) {
376
- gdk_pixbuf_copy_area(op->pixbuf, op->area.minX, op->area.minY,
365
+ gdk_pixbuf_copy_area(op->pixbuf, op->area.minX, op->area.minY,
377
366
  width, height, op->preview, 0, 0);
378
367
  }
379
-
368
+
380
369
  return op->preview;
381
370
  }
382
371
 
@@ -384,35 +373,35 @@ static void desaturate_blob(redeyeop_t *op, int blob_id)
384
373
  {
385
374
  int y, x;
386
375
  int minX, minY, maxX, maxY;
387
-
376
+
388
377
  minY = MAX(0, op->area.minY + op->regions.region[blob_id].minY - 1);
389
- maxY = MIN(op->area.maxY + op->regions.region[blob_id].maxY + 1,
378
+ maxY = MIN(op->area.maxY + op->regions.region[blob_id].maxY + 1,
390
379
  gdk_pixbuf_get_height(op->pixbuf)-1);
391
380
  minX = MAX(0, op->area.minX + op->regions.region[blob_id].minX - 1);
392
- maxX = MIN(op->area.maxX + op->regions.region[blob_id].maxX + 1,
381
+ maxX = MIN(op->area.maxX + op->regions.region[blob_id].maxX + 1,
393
382
  gdk_pixbuf_get_width(op->pixbuf)-1);
394
-
383
+
395
384
  guchar *data = gdk_pixbuf_get_pixels(op->pixbuf);
396
385
  int rowstride = gdk_pixbuf_get_rowstride(op->pixbuf);
397
386
  int pixWidth = gdk_pixbuf_get_has_alpha(op->pixbuf) ? 4 : 3;
398
-
387
+
399
388
  for ( y = minY; y <= maxY; y++ )
400
389
  {
401
390
  guchar *thisLine = data + (rowstride * y);
402
391
  guchar *pixel;
403
-
392
+
404
393
  pixel = thisLine + (minX * pixWidth);
405
-
394
+
406
395
  for ( x = minX; x <= maxX; x++ )
407
396
  {
408
-
397
+
409
398
  double alpha = alpha_level_for_pixel(op, x, y, blob_id);
410
399
  int r,g,b,grey;
411
-
400
+
412
401
  r = pixel[0];
413
402
  g = pixel[1];
414
403
  b = pixel[2];
415
-
404
+
416
405
  if (alpha > 0)
417
406
  {
418
407
  grey = alpha * ((double)( 5 * (double)r + 60 * (double)g + 30 * (double)b)) / 100.0 +
@@ -422,11 +411,11 @@ static void desaturate_blob(redeyeop_t *op, int blob_id)
422
411
  pixel[1] = col((grey * alpha) + (1-alpha) * g);
423
412
  pixel[2] = col((grey * alpha) + (1-alpha) * b);
424
413
  }
425
-
414
+
426
415
  pixel += pixWidth;
427
416
  }
428
417
  }
429
-
418
+
430
419
  }
431
420
 
432
421
  static void highlight_blob(redeyeop_t *op, int blob_id, int colour)
@@ -434,16 +423,16 @@ static void highlight_blob(redeyeop_t *op, int blob_id, int colour)
434
423
  int y, x;
435
424
  int minX, minY, maxX, maxY;
436
425
  int hr, hg, hb;
437
-
426
+
438
427
  hr = (colour >> 16) & 0xff;
439
428
  hg = (colour >> 8) & 0xff;
440
429
  hb = (colour) & 0xff;
441
-
430
+
442
431
  minY = MAX(0, op->area.minY - 1);
443
432
  maxY = MIN(op->area.maxY + 1, gdk_pixbuf_get_height(op->pixbuf)-1);
444
433
  minX = MAX(0, op->area.minX - 1);
445
434
  maxX = MIN(op->area.maxX + 1, gdk_pixbuf_get_width(op->pixbuf)-1);
446
-
435
+
447
436
  guchar *data = gdk_pixbuf_get_pixels(op->pixbuf);
448
437
  int rowstride = gdk_pixbuf_get_rowstride(op->pixbuf);
449
438
  int pixWidth = gdk_pixbuf_get_has_alpha(op->pixbuf) ? 4 : 3;
@@ -452,32 +441,32 @@ static void highlight_blob(redeyeop_t *op, int blob_id, int colour)
452
441
  {
453
442
  guchar *thisLine = data + (rowstride * y);
454
443
  guchar *pixel;
455
-
444
+
456
445
  pixel = thisLine + (minX * pixWidth);
457
-
446
+
458
447
  for ( x = minX; x <= maxX; x++ )
459
448
  {
460
-
449
+
461
450
  double alpha = alpha_level_for_pixel(op, x, y, blob_id);
462
451
  int r,g,b;
463
-
452
+
464
453
  r = (pixel[0]);
465
454
  g = (pixel[1]);
466
455
  b = (pixel[2]);
467
-
468
-
456
+
457
+
469
458
  if (alpha > 0)
470
459
  {
471
-
460
+
472
461
  pixel[0] = col((1-alpha) * r + (alpha * hr));
473
462
  pixel[1] = col((1-alpha) * g + (alpha * hg));
474
463
  pixel[2] = col((1-alpha) * b + (alpha * hb));
475
464
  }
476
-
465
+
477
466
  pixel += pixWidth;
478
467
  }
479
468
  }
480
-
469
+
481
470
  }
482
471
 
483
472
 
@@ -486,18 +475,18 @@ static void preview_blob(redeyeop_t *op, int blob_id, int colour, gboolean reset
486
475
  int y, x;
487
476
  int minX, minY, maxX, maxY;
488
477
  int hr, hg, hb;
489
-
478
+
490
479
  redeye_preview(op, reset_preview);
491
-
480
+
492
481
  hr = (colour >> 16) & 0xff;
493
482
  hg = (colour >> 8) & 0xff;
494
483
  hb = (colour) & 0xff;
495
-
484
+
496
485
  minY = 0;
497
486
  maxY = gdk_pixbuf_get_height(op->preview)-1;
498
487
  minX = 0;
499
488
  maxX = gdk_pixbuf_get_width(op->preview)-1;
500
-
489
+
501
490
  guchar *data = gdk_pixbuf_get_pixels(op->preview);
502
491
  int rowstride = gdk_pixbuf_get_rowstride(op->preview);
503
492
  int pixWidth = gdk_pixbuf_get_has_alpha(op->preview) ? 4 : 3;
@@ -506,40 +495,40 @@ static void preview_blob(redeyeop_t *op, int blob_id, int colour, gboolean reset
506
495
  {
507
496
  guchar *thisLine = data + (rowstride * y);
508
497
  guchar *pixel;
509
-
498
+
510
499
  pixel = thisLine + (minX * pixWidth);
511
-
500
+
512
501
  for ( x = minX; x <= maxX; x++ )
513
502
  {
514
-
503
+
515
504
  double alpha = alpha_level_for_pixel(op, x + op->area.minX, y + op->area.minY, blob_id);
516
505
  int r,g,b;
517
-
506
+
518
507
  r = (pixel[0]);
519
508
  g = (pixel[1]);
520
509
  b = (pixel[2]);
521
-
522
-
510
+
511
+
523
512
  if (alpha > 0)
524
513
  {
525
-
514
+
526
515
  pixel[0] = col((1-alpha) * r + (alpha * hr));
527
516
  pixel[1] = col((1-alpha) * g + (alpha * hg));
528
517
  pixel[2] = col((1-alpha) * b + (alpha * hb));
529
518
  }
530
-
519
+
531
520
  pixel += pixWidth;
532
521
  }
533
522
  }
534
-
523
+
535
524
  }
536
525
 
537
526
 
538
527
  /* Code */
539
528
  static VALUE
540
- RedEye___alloc__(VALUE self)
529
+ RedEye___alloc__(VALUE self OPTIONAL_ATTR )
541
530
  {
542
- VALUE __p_retval = Qnil;
531
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
543
532
 
544
533
  #line 536 "/home/geoff/Projects/redeye/ext/redeye/redeye.cr"
545
534
  do { __p_retval = Data_Wrap_Struct(self, NULL, free_redeye, new_redeye()); goto out; } while(0);
@@ -548,7 +537,7 @@ out:
548
537
  }
549
538
 
550
539
  static VALUE
551
- RedEye_initialize(VALUE self, VALUE __v_pixbuf, VALUE __v_minX, VALUE __v_minY, VALUE __v_maxX, VALUE __v_maxY)
540
+ RedEye_initialize(VALUE self OPTIONAL_ATTR , VALUE __v_pixbuf OPTIONAL_ATTR, VALUE __v_minX OPTIONAL_ATTR, VALUE __v_minY OPTIONAL_ATTR, VALUE __v_maxX OPTIONAL_ATTR, VALUE __v_maxY OPTIONAL_ATTR)
552
541
  {
553
542
  GdkPixbuf * pixbuf; GdkPixbuf * __orig_pixbuf;
554
543
  int minX; int __orig_minX;
@@ -598,7 +587,7 @@ RedEye_initialize(VALUE self, VALUE __v_pixbuf, VALUE __v_minX, VALUE __v_minY,
598
587
  static VALUE
599
588
  RedEye_identify_blobs(int __p_argc, VALUE *__p_argv, VALUE self)
600
589
  {
601
- VALUE __p_retval = Qnil;
590
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
602
591
  VALUE __v_green_sensitivity = Qnil;
603
592
  double green_sensitivity; double __orig_green_sensitivity;
604
593
  VALUE __v_blue_sensitivity = Qnil;
@@ -653,7 +642,7 @@ out:
653
642
  }
654
643
 
655
644
  static VALUE
656
- RedEye_correct_blob(VALUE self, VALUE __v_blob_id)
645
+ RedEye_correct_blob(VALUE self OPTIONAL_ATTR , VALUE __v_blob_id OPTIONAL_ATTR)
657
646
  {
658
647
  int blob_id; int __orig_blob_id;
659
648
  __orig_blob_id = blob_id = NUM2INT(__v_blob_id);
@@ -709,7 +698,7 @@ RedEye_highlight_blob(int __p_argc, VALUE *__p_argv, VALUE self)
709
698
  static VALUE
710
699
  RedEye_preview_blob(int __p_argc, VALUE *__p_argv, VALUE self)
711
700
  {
712
- VALUE __p_retval = Qnil;
701
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
713
702
  VALUE __v_blob_id = Qnil;
714
703
  int blob_id; int __orig_blob_id;
715
704
  VALUE __v_col = Qnil;
@@ -750,9 +739,9 @@ out:
750
739
  }
751
740
 
752
741
  static VALUE
753
- RedEye_preview(VALUE self)
742
+ RedEye_preview(VALUE self OPTIONAL_ATTR )
754
743
  {
755
- VALUE __p_retval = Qnil;
744
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
756
745
 
757
746
  #line 635 "/home/geoff/Projects/redeye/ext/redeye/redeye.cr"
758
747
 
@@ -768,9 +757,9 @@ out:
768
757
  }
769
758
 
770
759
  static VALUE
771
- RedEye_pixbuf(VALUE self)
760
+ RedEye_pixbuf(VALUE self OPTIONAL_ATTR )
772
761
  {
773
- VALUE __p_retval = Qnil;
762
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
774
763
 
775
764
  #line 642 "/home/geoff/Projects/redeye/ext/redeye/redeye.cr"
776
765
 
@@ -786,9 +775,9 @@ out:
786
775
  }
787
776
 
788
777
  static VALUE
789
- Region_ratio(VALUE self)
778
+ Region_ratio(VALUE self OPTIONAL_ATTR )
790
779
  {
791
- VALUE __p_retval = Qnil;
780
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
792
781
 
793
782
  #line 497 "/home/geoff/Projects/redeye/ext/redeye/redeye.cr"
794
783
  int width,height;
@@ -804,9 +793,9 @@ out:
804
793
  }
805
794
 
806
795
  static VALUE
807
- Region_density(VALUE self)
796
+ Region_density(VALUE self OPTIONAL_ATTR )
808
797
  {
809
- VALUE __p_retval = Qnil;
798
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
810
799
 
811
800
  #line 507 "/home/geoff/Projects/redeye/ext/redeye/redeye.cr"
812
801
 
@@ -828,7 +817,7 @@ out:
828
817
  static VALUE
829
818
  Region_squareish_query(int __p_argc, VALUE *__p_argv, VALUE self)
830
819
  {
831
- VALUE __p_retval = Qnil;
820
+ VALUE __p_retval OPTIONAL_ATTR = Qnil;
832
821
  VALUE __v_min_ratio = Qnil;
833
822
  double min_ratio; double __orig_min_ratio;
834
823
  VALUE __v_min_density = Qnil;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redeye
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Youngs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-21 00:00:00.000000000 Z
11
+ date: 2016-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubber-generate