| 4438 | ]; |
| 4439 | |
| 4440 | function filterGaussBlurRGBA( imageData, radius) { |
| 4441 | |
| 4442 | var pixels = imageData.data, |
| 4443 | width = imageData.width, |
| 4444 | height = imageData.height; |
| 4445 | |
| 4446 | var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, |
| 4447 | r_out_sum, g_out_sum, b_out_sum, a_out_sum, |
| 4448 | r_in_sum, g_in_sum, b_in_sum, a_in_sum, |
| 4449 | pr, pg, pb, pa, rbs; |
| 4450 | |
| 4451 | var div = radius + radius + 1, |
| 4452 | widthMinus1 = width - 1, |
| 4453 | heightMinus1 = height - 1, |
| 4454 | radiusPlus1 = radius + 1, |
| 4455 | sumFactor = radiusPlus1 * ( radiusPlus1 + 1 ) / 2, |
| 4456 | stackStart = new BlurStack(), |
| 4457 | stackEnd = null, |
| 4458 | stack = stackStart, |
| 4459 | stackIn = null, |
| 4460 | stackOut = null, |
| 4461 | mul_sum = mul_table[radius], |
| 4462 | shg_sum = shg_table[radius]; |
| 4463 | |
| 4464 | for ( i = 1; i < div; i++ ) { |
| 4465 | stack = stack.next = new BlurStack(); |
| 4466 | if ( i == radiusPlus1 ){ |
| 4467 | stackEnd = stack; |
| 4468 | } |
| 4469 | } |
| 4470 | |
| 4471 | stack.next = stackStart; |
| 4472 | |
| 4473 | yw = yi = 0; |
| 4474 | |
| 4475 | for ( y = 0; y < height; y++ ) |
| 4476 | { |
| 4477 | r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0; |
| 4478 | |
| 4479 | r_out_sum = radiusPlus1 * ( pr = pixels[yi] ); |
| 4480 | g_out_sum = radiusPlus1 * ( pg = pixels[yi+1] ); |
| 4481 | b_out_sum = radiusPlus1 * ( pb = pixels[yi+2] ); |
| 4482 | a_out_sum = radiusPlus1 * ( pa = pixels[yi+3] ); |
| 4483 | |
| 4484 | r_sum += sumFactor * pr; |
| 4485 | g_sum += sumFactor * pg; |
| 4486 | b_sum += sumFactor * pb; |
| 4487 | a_sum += sumFactor * pa; |
| 4488 | |
| 4489 | stack = stackStart; |
| 4490 | |
| 4491 | for( i = 0; i < radiusPlus1; i++ ) |
| 4492 | { |
| 4493 | stack.r = pr; |
| 4494 | stack.g = pg; |
| 4495 | stack.b = pb; |
| 4496 | stack.a = pa; |
| 4497 | stack = stack.next; |