1/* 2 * Copyright 2008-2010 Stephan Aßmus <superstippi@gmx.de> 3 * Distributed under the terms of the MIT license. 4 */ 5//---------------------------------------------------------------------------- 6// Anti-Grain Geometry - Version 2.4 7// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) 8// 9// Permission to copy, use, modify, sell and distribute this software 10// is granted provided this copyright notice appears in all copies. 11// This software is provided "as is" without express or implied 12// warranty, and with no claim as to its suitability for any purpose. 13// 14//---------------------------------------------------------------------------- 15// Contact: mcseem@antigrain.com 16// mcseemagg@yahoo.com 17// http://www.antigrain.com 18//---------------------------------------------------------------------------- 19// 20// The Stack Blur Algorithm was invented by Mario Klingemann, 21// mario@quasimondo.com and described here: 22// http://incubator.quasimondo.com/processing/fast_blur_deluxe.php 23// (search phrase "Stackblur: Fast But Goodlooking"). 24// The major improvement is that there's no more division table 25// that was very expensive to create for large blur radii. Insted, 26// for 8-bit per channel and radius not exceeding 254 the division is 27// replaced by multiplication and shift. 28// 29//---------------------------------------------------------------------------- 30#ifndef STACK_BLUR_FILTER 31#define STACK_BLUR_FILTER 32 33#include <SupportDefs.h> 34 35class BBitmap; 36class RenderBuffer; 37 38class StackBlurFilter { 39public: 40 StackBlurFilter(); 41 ~StackBlurFilter(); 42 43 44 void Filter(BBitmap* bitmap, double radius); 45 46private: 47 void _Filter32(uint8* buffer, 48 unsigned width, unsigned height, 49 int32 bpr, 50 unsigned rx, unsigned ry) const; 51 void _Filter8(uint8* buffer, 52 unsigned width, unsigned height, 53 int32 bpr, 54 unsigned rx, unsigned ry) const; 55}; 56 57#endif // STACK_BLUR_FILTER 58