MCPcopy Create free account
hub / github.com/MapServer/MapServer / stack_blur_gray8

Function stack_blur_gray8

renderers/agg/include/agg_blur.h:355–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

353 //========================================================stack_blur_gray8
354 template<class Img>
355 void stack_blur_gray8(Img& img, unsigned rx, unsigned ry)
356 {
357 unsigned x, y, xp, yp, i;
358 unsigned stack_ptr;
359 unsigned stack_start;
360
361 const int8u* src_pix_ptr;
362 int8u* dst_pix_ptr;
363 unsigned pix;
364 unsigned stack_pix;
365 unsigned sum;
366 unsigned sum_in;
367 unsigned sum_out;
368
369 unsigned w = img.width();
370 unsigned h = img.height();
371 unsigned wm = w - 1;
372 unsigned hm = h - 1;
373
374 unsigned div;
375 unsigned mul_sum;
376 unsigned shr_sum;
377
378 pod_vector<int8u> stack;
379
380 if(rx > 0)
381 {
382 if(rx > 254) rx = 254;
383 div = rx * 2 + 1;
384 mul_sum = stack_blur_tables<int>::g_stack_blur8_mul[rx];
385 shr_sum = stack_blur_tables<int>::g_stack_blur8_shr[rx];
386 stack.allocate(div);
387
388 for(y = 0; y < h; y++)
389 {
390 sum = sum_in = sum_out = 0;
391
392 src_pix_ptr = img.pix_ptr(0, y);
393 pix = *src_pix_ptr;
394 for(i = 0; i <= rx; i++)
395 {
396 stack[i] = pix;
397 sum += pix * (i + 1);
398 sum_out += pix;
399 }
400 for(i = 1; i <= rx; i++)
401 {
402 if(i <= wm) src_pix_ptr += Img::pix_step;
403 pix = *src_pix_ptr;
404 stack[i + rx] = pix;
405 sum += pix * (rx + 1 - i);
406 sum_in += pix;
407 }
408
409 stack_ptr = rx;
410 xp = rx;
411 if(xp > wm) xp = wm;
412 src_pix_ptr = img.pix_ptr(xp, y);

Callers

nothing calls this directly

Calls 5

widthMethod · 0.45
heightMethod · 0.45
allocateMethod · 0.45
pix_ptrMethod · 0.45
strideMethod · 0.45

Tested by

no test coverage detected