… | |
… | |
97 | } |
97 | } |
98 | } |
98 | } |
99 | |
99 | |
100 | ///////////////////////////////////////////////////////////////////////////// |
100 | ///////////////////////////////////////////////////////////////////////////// |
101 | |
101 | |
102 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV::ImageWindow |
102 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV |
103 | |
103 | |
104 | PROTOTYPES: ENABLE |
104 | PROTOTYPES: ENABLE |
105 | |
105 | |
106 | GdkPixbuf_noinc * |
106 | GdkPixbuf_noinc * |
107 | transpose (GdkPixbuf *pb) |
107 | transpose (GdkPixbuf *pb) |
… | |
… | |
235 | } |
235 | } |
236 | } |
236 | } |
237 | } |
237 | } |
238 | OUTPUT: |
238 | OUTPUT: |
239 | RETVAL |
239 | RETVAL |
|
|
240 | |
|
|
241 | SV * |
|
|
242 | make_histogram (SV *ar) |
|
|
243 | CODE: |
|
|
244 | { |
|
|
245 | int i; |
|
|
246 | AV *av, *result; |
|
|
247 | |
|
|
248 | if (!SvROK (ar) || SvTYPE (SvRV (ar)) != SVt_PVAV) |
|
|
249 | croak ("Not an array ref as first argument to make_histogram"); |
|
|
250 | |
|
|
251 | av = (AV *) SvRV (ar); |
|
|
252 | result = newAV (); |
|
|
253 | |
|
|
254 | for (i = 0; i <= av_len (av); ++i) |
|
|
255 | { |
|
|
256 | int bigst, j; |
|
|
257 | SV *sv = *av_fetch (av, i, 1); |
|
|
258 | STRLEN len; |
|
|
259 | char *buf = SvPVbyte (sv, len); |
|
|
260 | |
|
|
261 | int tmphist[256]; |
|
|
262 | char *hist; |
|
|
263 | |
|
|
264 | SV *histsv = newSV (257); |
|
|
265 | SvPOK_on (histsv); |
|
|
266 | SvCUR_set (histsv, 256); |
|
|
267 | hist = SvPVX (histsv); |
|
|
268 | |
|
|
269 | Zero (tmphist, 256, int); |
|
|
270 | |
|
|
271 | j = len; |
|
|
272 | |
|
|
273 | while (len--) |
|
|
274 | ++tmphist[(unsigned char)*buf++ & 0xda]; |
|
|
275 | |
|
|
276 | len = j; |
|
|
277 | |
|
|
278 | bigst = 1; |
|
|
279 | for (j = 0; j < 256; ++j) |
|
|
280 | if (tmphist[j] > bigst) |
|
|
281 | bigst = tmphist[j]; |
|
|
282 | |
|
|
283 | for (j = 0; j < 256; ++j) |
|
|
284 | hist[j] = tmphist[j] * 255 / (len == 0 ? 1 : len);//bigst; |
|
|
285 | |
|
|
286 | av_push (result, histsv); |
|
|
287 | } |
|
|
288 | |
|
|
289 | RETVAL = newRV_noinc ((SV *)result); |
|
|
290 | } |
|
|
291 | OUTPUT: |
|
|
292 | RETVAL |
|
|
293 | |
|
|
294 | |
240 | |
295 | |
241 | ############################################################################# |
296 | ############################################################################# |
242 | |
297 | |
243 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript |
298 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript |
244 | |
299 | |
… | |
… | |
345 | } |
400 | } |
346 | } |
401 | } |
347 | OUTPUT: |
402 | OUTPUT: |
348 | RETVAL |
403 | RETVAL |
349 | |
404 | |
|
|
405 | SV * |
|
|
406 | hv84_to_av (unsigned char *hv84) |
|
|
407 | CODE: |
|
|
408 | { |
|
|
409 | int i = 72 / 3; |
|
|
410 | AV *av = newAV (); |
350 | |
411 | |
|
|
412 | RETVAL = (SV *)newRV_noinc ((SV *)av); |
|
|
413 | while (i--) |
|
|
414 | { |
|
|
415 | int h = *hv84++; |
|
|
416 | int v1 = *hv84++; |
|
|
417 | int v2 = *hv84++; |
351 | |
418 | |
|
|
419 | av_push (av, newSViv (v1)); |
|
|
420 | av_push (av, newSViv ((h >> 4) * 255 / 15)); |
|
|
421 | av_push (av, newSViv (v2)); |
|
|
422 | av_push (av, newSViv ((h & 15) * 255 / 15)); |
|
|
423 | } |
|
|
424 | } |
|
|
425 | OUTPUT: |
|
|
426 | RETVAL |
352 | |
427 | |
|
|
428 | |
|
|
429 | |