求高斯模糊效果的例子

各位大大,求一个精简的cocos2dx高斯模糊的例子,官方的例子里面真心看不懂啊,且拿来用后卡的要死,不知道是哪里出了问题,求版主帮忙

忘了说版本了,小弟用的是cocos2d-x 3.4,有没有哪位大哥做过这样的例子,给小弟参考一下:866::866::866::866:

弄一张半透明的毛玻璃图片覆盖在你所要的图片上如何?

陪楼主一起等答案出现。。。。

这样好像不行,问了我们的ui,好像没有半透明的毛玻璃

难道大家就没这方面的需求吗??:2::2::2::2::2:

官方的高斯滤镜是shader实现的, 如果是ui弹出进行背景模糊效果的这种需求的,
大概思路是截图后生成一个模糊的精灵, 加入当前层, 设置LocalZOrder为-1

有这么几点非常关键

  1. 首先要获得一个截图, 我这边版本正好也是3.4, 这个版本提供了截屏图片, 可以参考utils::captureScreen
  2. 回调后, 可以获得一个数组, 这个时候是从显存里扣出, 就是onCaptureScreen里的flippedBuffer, 需要将这个玩意压缩一下, 个人建议长宽都缩小为原来的四分之一, 可以参考这个地址里的压缩算法, 我用的是PicZoom3, 速度已经很满意了,
    http://blog.chinaunix.net/uid-22915173-id-2185545.html
  3. 将图像压缩后两个办法模糊
    3.1 生成Image再生成纹理再做成精灵, 使用官方的高斯滤镜将精灵模糊后拉伸为全屏, 建议半径8
    3.2 将压缩后数组通过stackblur进行处理, 这个算法比较快, 源码在http://vitiy.info/Code/stackblur.cpp, 再生成Image->纹理->精灵

我这边使用的是stackblur进行的, 在1920*1080分辨率的情况下, 比较挫的手机执行需要80-100ms(联发科两年前的一个入门4核, 型号不太记得), 比较好的手机需要50-60ms(晓龙801)

效果如图

1赞

速度上, 我觉得还能有优化空间,
目前最卡的是截图过程, 从gpu扣数据到内存那一步, 就是glReadPixels执行的时候, 这一步消耗了50ms以上, 如果能优化这个虚化效果执行可以非常流畅

谢谢你的分享~~~我会用你的思路和方法去尝试一下 :2: :2:

mark一下有空研究

mark;。。。。。

如果静态背景 不如弄长模糊的图片叠加 效率高

我这里有C++的代码 大家可以来测试一下
local function onFinishCapture(ret,img)
if ret then
local texture = cc.Director:getInstance():getTextureCache():addImage(img, “capriteadu”)
local spriteBlur = cc.Sprite:createWithTexture(texture)
local wSize = cc.Director:getInstance():getWinSize()
spriteBlur:setPosition(cc.p(wSize.width/2, wSize.height/2))
self:addChild(spriteBlur)
PF.UIEx.nodeToScaleForFixedSize(spriteBlur, wSize)
end
end
pf.Common:GaussianBlur(onFinishCapture, 4)

http://blog.csdn.net/hanbingfengying/article/details/53501922

1赞