How can I expand the radius of a light bloom?
===

I am writing a software filter object and trying to implement a light bloom effect.  I'm using a simple, two pass convolution approach which works fine except that the effect radius is tiny and I can't seem to control the radius.  I've played with larger box filters and adjusted the weights of the various pixels, but none of that seems to have any effect.  The effect seems to have a maximum size (which is not very big) and then all changes to the parameters just serve to make it smaller.

I'd like to be able to create a light bloom with an arbitrary radius.  After a LOT of experimentation and searching online, I'm starting to wonder if this just can't be done.  I've been thinking about alternate approaches--plasmas, gradients, and various seeding schemes--but I'd like to hound this path into the ground first.  Does anyone out there know how to create an arbitrarily sized light bloom (in software)?

The javascript is as follows (this operates on an HTML5 canvas; I can add comments to the code if needed):

    // the kernel functions are called via Array.map on this.backBuffer.data, a canvas surface color array
    this.kernelFirstPass = function(val, index, array)
	{
		if(index<pitch || index>=array.length-pitch || index%pitch<4 || index%pitch>pitch-5 || index%4==3)
			return;
		var c = 1,
			l1 = 1,
			l2 = 1,
			l3 = 1,
			r1 = 1,
			r2 = 1,
			r3 = 1;
		var avg =
		(
			c*this.frontBuffer.data[index]+
			l1*this.frontBuffer.data[index-4]+
			l2*this.frontBuffer.data[index-8]+
			l3*this.frontBuffer.data[index-12]+
			l1*this.frontBuffer.data[index+4]+
			l2*this.frontBuffer.data[index+8]+
			l3*this.frontBuffer.data[index+12]
		)/(c+l1+l2+l3+l1+l2+l3);
		//this.frontBuffer.data[index] = avg;
		array[index] = avg;
	}
    this.kernelSecondPass = function(val, index, array)
	{
		if(index<pitch || index>=array.length-pitch || index%pitch<4 || index%pitch>=pitch-4 || index%4==3)
			return;
		var c = 1,
			l1 = 1,
			l2 = 1,
			l3 = 1,
			r1 = 1,
			r2 = 1,
			r3 = 1;
		var avg =
		(
			c*array[index]+
			l1*array[index-pitch]+
			l2*array[index-(pitch*2)]+
			l3*array[index-(pitch*3)]+
			l1*array[index+pitch]+
			l2*array[index+(pitch*2)]+
			l3*array[index+(pitch*3)]
		)/(c+l1+l2+l3+l1+l2+l3);
		array[index] = avg;
	}