Public Member Functions | Static Public Member Functions | Protected Attributes

gfxAlphaBoxBlur Class Reference

Implementation of a triple box blur approximation of a Gaussian blur. More...

#include <gfxBlur.h>

Collaboration diagram for gfxAlphaBoxBlur:

List of all members.

Public Member Functions

 gfxAlphaBoxBlur ()
 ~gfxAlphaBoxBlur ()
gfxContextInit (const gfxRect &aRect, const gfxIntSize &aSpreadRadius, const gfxIntSize &aBlurRadius, const gfxRect *aDirtyRect, const gfxRect *aSkipRect)
 Constructs a box blur and initializes the temporary surface.
gfxContextGetContext ()
 Returns the context that should be drawn to supply the alpha mask to be blurred.
void PremultiplyAlpha (gfxFloat alpha)
 Premultiplies the image by the given alpha.
void Paint (gfxContext *aDestinationCtx, const gfxPoint &offset=gfxPoint(0.0, 0.0))
 Does the actual blurring/spreading and mask applying.

Static Public Member Functions

static gfxIntSize CalculateBlurRadius (const gfxPoint &aStandardDeviation)
 Calculates a blur radius that, when used with box blur, approximates a Gaussian blur with the given standard deviation.

Protected Attributes

gfxIntSize mSpreadRadius
 The spread radius, in pixels.
gfxIntSize mBlurRadius
 The blur radius, in pixels.
nsRefPtr< gfxContextmContext
 The context of the temporary alpha surface.
nsRefPtr< gfxImageSurfacemImageSurface
 The temporary alpha surface.
gfxRect mDirtyRect
 A copy of the dirty rect passed to Init().
nsIntRect mSkipRect
 A rect indicating the area where blurring is unnecessary, and the blur algorithm should skip over it.
PRPackedBool mHasDirtyRect

Detailed Description

Implementation of a triple box blur approximation of a Gaussian blur.

A Gaussian blur is good for blurring because, when done independently in the horizontal and vertical directions, it matches the result that would be obtained using a different (rotated) set of axes. A triple box blur is a very close approximation of a Gaussian.

Creates an 8-bit alpha channel context for callers to draw in, spreads the contents of that context, blurs the contents, and applies it as an alpha mask on a different existing context.

A spread N makes each output pixel the maximum value of all source pixels within a square of side length 2N+1 centered on the output pixel.

A temporary surface is created in the Init function. The caller then draws any desired content onto the context acquired through GetContext, and lastly calls Paint to apply the blurred content as an alpha mask.


Constructor & Destructor Documentation

gfxAlphaBoxBlur::gfxAlphaBoxBlur (  ) 
gfxAlphaBoxBlur::~gfxAlphaBoxBlur (  ) 

Member Function Documentation

static gfxIntSize gfxAlphaBoxBlur::CalculateBlurRadius ( const gfxPoint aStandardDeviation  )  [static]

Calculates a blur radius that, when used with box blur, approximates a Gaussian blur with the given standard deviation.

The result of this function should be used as the aBlurRadius parameter to Init, above.

gfxContext* gfxAlphaBoxBlur::GetContext (  )  [inline]

Returns the context that should be drawn to supply the alpha mask to be blurred.

If the returned surface is null, then there was an error in its creation.

gfxContext* gfxAlphaBoxBlur::Init ( const gfxRect aRect,
const gfxIntSize aSpreadRadius,
const gfxIntSize aBlurRadius,
const gfxRect aDirtyRect,
const gfxRect aSkipRect 
)

Constructs a box blur and initializes the temporary surface.

Parameters:
aRect The coordinates of the surface to create in device units.
aBlurRadius The blur radius in pixels. This is the radius of the entire (triple) kernel function. Each individual box blur has radius approximately 1/3 this value, or diameter approximately 2/3 this value. This parameter should nearly always be computed using CalculateBlurRadius, below.
aDirtyRect A pointer to a dirty rect, measured in device units, if available. This will be used for optimizing the blur operation. It is safe to pass NULL here.
aSkipRect A pointer to a rect, measured in device units, that represents an area where blurring is unnecessary and shouldn't be done for speed reasons. It is safe to pass NULL here.
void gfxAlphaBoxBlur::Paint ( gfxContext aDestinationCtx,
const gfxPoint offset = gfxPoint(0.0, 0.0) 
)

Does the actual blurring/spreading and mask applying.

Users of this object must have drawn whatever they want to be blurred onto the internal gfxContext returned by GetContext before calling this.

Parameters:
aDestinationCtx The graphics context on which to apply the blurred mask.
void gfxAlphaBoxBlur::PremultiplyAlpha ( gfxFloat  alpha  ) 

Premultiplies the image by the given alpha.


Member Data Documentation

The blur radius, in pixels.

The context of the temporary alpha surface.

A copy of the dirty rect passed to Init().

This will only be valid if mHasDirtyRect is TRUE.

The temporary alpha surface.

A rect indicating the area where blurring is unnecessary, and the blur algorithm should skip over it.

The spread radius, in pixels.


The documentation for this class was generated from the following file: