… | |
… | |
236 | } |
236 | } |
237 | } |
237 | } |
238 | OUTPUT: |
238 | OUTPUT: |
239 | RETVAL |
239 | RETVAL |
240 | |
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 | |
|
|
295 | |
241 | ############################################################################# |
296 | ############################################################################# |
242 | |
297 | |
243 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript |
298 | MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript |
244 | |
299 | |
245 | void |
300 | void |