一幅图片,其上会画出N个区域(每个区域要么是矩形,要么是椭圆形,为了简单,此贴只讨论矩形的情况),区域之间可能会重叠,画区域的目的是对这些区域内的图像进行模糊。
为了有好的模糊,允许指定模糊单元的大小,每个单元内的颜色进行平均,模糊单元允许对长和宽进行单独指定,比如10*10,就表示每个10*10的区域进行颜色平均。为了简单,所有区域的模糊单元大小都相同
____________________________
|````````````````````````````|
|```````` __________`````````|
|````````|``````````|````````|
|````````|``````````|````````|
|````````|__________|````````|
|````````````````````````````|
|````````````````````````````|
|____________________________|
比如以上内方框为要模糊的区域,这个区域可能被划分成Z个小的单元,当然在右面和下面,不一定刚好足够一个单元的大小,这个问题我只做了简单的处理,不在此贴讨论的范围内
如果只有这一个要模糊的区域就好办,如果还有一个区域,比如位于它的左下方或者右下方
____________________________
|````````````````````````````|
|`````````__________```````` |
|````````|``````````|````````|
|````____|````A`````|````````|
|```|````|__________|````````|
|```|```B`````|``````````````|
|```|_________|``````````````|
|____________________________|
如上,所示,这种情况下,如果模糊单元的划分不能恰好把A的顶部到B的顶部纵向划分,那如何检测到B区域右上角?还有如果连宽度也不够的话,如何进行模糊?
纵向,我现在的代码大致如下:
//
for ( ly = 0; ly < lVideoHeight - 2; ly += lBlurHeight )
{
bool bBlur = false;
// 对横向进行模糊搜索并模糊,如果有模糊,就置bBlur为true
...
// 如果没有模糊,则一次只加1个像素,即逐行循环
if ( !bBlur )
ly -= lBlurHeight - 1;
} // end for ( ly
以上代码会导致上面所说的,如果单元无法刚好把各边平分,就会导致部分需要被模糊的区域没有模糊,因为是一次性增加了单元的高度
现求算法,或者方法
专门用文字描述不太容易描述清楚,如果大家不清楚的话,我再看咋弄的更好一些