/*
*
* public void Blur(int radius, int passes)
* {
* QBitmap tmp = new QBitmap(new Bitmap(this.bitmap.Width, this.bitmap.Height, bitmap.PixelFormat));
*
* byte r=0,g=0,b=0,a=0;
* int summedR, summedG, summedB, summedA;
* int weight = 0;
* int xpos, ypos, x, y, kx, ky;
*
*
* for (int pass = 0; pass < passes; pass++)
* {
*
* //horizontal pass
* for (y = 0; y < bitmap.Height; y++)
* {
* for (x = 0; x < bitmap.Width; x++)
* {
* summedR = summedG = summedB = summedA = weight = 0;
* for (kx = -radius; kx <= radius; kx++)
* {
* xpos = x + kx;
* if (xpos >= 0 && xpos < bitmap.Width)
* {
* GetPixel32(xpos, y, ref r, ref g, ref b, ref a);
*
*
* summedR += r;
* summedG += g;
* summedB += b;
* summedA += a;
* weight++;
* }
*
* }
*
* summedR /= weight;
* summedG /= weight;
* summedB /= weight;
* summedA /= weight;
*
* tmp.PutPixel32(x, y, (byte)summedR, (byte)summedG, (byte)summedB, (byte)summedA);
* }
* }
*
*
*
*
* //vertical pass
* for (x = 0; x < bitmap.Width; ++x)
* {
* for (y = 0; y < bitmap.Height; ++y)
* {
* summedR = summedG = summedB = summedA = weight = 0;
* for (ky = -radius; ky <= radius; ky++)
* {
* ypos = y + ky;
* if (ypos >= 0 && ypos < bitmap.Height)
* {
* tmp.GetPixel32(x, ypos, ref r, ref g, ref b, ref a);
*
* summedR += r;
* summedG += g;
* summedB += b;
* summedA += a;
* weight++;
* }
* }
*
* summedR /= weight;
* summedG /= weight;
* summedB /= weight;
* summedA /= weight;
*
* PutPixel32(x, y, (byte)summedR, (byte)summedG, (byte)summedB, (byte)summedA);
*
* }
* }
*
* }
*
* tmp.Free();
*
* }*/
public void BlurAlpha(int radius, int passes)
{
QBitmap tmp = new QBitmap(new Bitmap(this.bitmap.Width, this.bitmap.Height, bitmap.PixelFormat));
byte a = 0;
int summedA;
int weight = 0;
int xpos, ypos, x, y, kx, ky;
int width = bitmap.Width;
int height = bitmap.Height;
for (int pass = 0; pass < passes; pass++)
{
//horizontal pass
for (y = 0; y < height; y++)
{
for (x = 0; x < width; x++)
{
summedA = weight = 0;
for (kx = -radius; kx <= radius; kx++)
{
xpos = x + kx;
if (xpos >= 0 && xpos < width)
{
GetAlpha32(xpos, y, ref a);
summedA += a;
weight++;
}
}
summedA /= weight;
tmp.PutAlpha32(x, y, (byte)summedA);
}
}
//vertical pass
for (x = 0; x < width; ++x)
{
for (y = 0; y < height; ++y)
{
summedA = weight = 0;
for (ky = -radius; ky <= radius; ky++)
{
ypos = y + ky;
if (ypos >= 0 && ypos < height)
{
tmp.GetAlpha32(x, ypos, ref a);
summedA += a;
weight++;
}
}
summedA /= weight;
PutAlpha32(x, y, (byte)summedA);
}
}
}
tmp.Free();
}