移植StackBlur模糊算法至SDL

  StackBlur是Android标配的模糊算法,这也在当时引起了一股毛玻璃热潮。IOS7就采用了此算法(这有抄袭Android之嫌,因为Android1.5就在标库中加入了此函数)。算法效率很高,这也是能流畅运行在移动设备上的原因。但其只在Andorid上是标准库函数,移植版也只出现在Java上。本文带来一个在SDL上移植的StackBlur算法。运行效果基本如下图。

  

  一眼就可以看出,毛玻璃效果与Radius有直接的关系。Radius在5时,效果与动态模糊相似,在10时,会有点马赛克的感觉,在35时,就是IOS7的毛玻璃效果了。

  前文提到,算法效率很高。据测试(本机CPU E3 1230V2,显卡HD6770),在Radius>0时,帧速稳定在140fps左右而且随Radius变化的图像与下图像相似,但幅度极小,没有跌破过120fps。

  

  SDL部分移植还是比较容易的,由于SDL的Surface对象可以通过int指针直接作为一个ARGB8888格式的二维数组进行读写,所以尤为方便,部分代码甚至可以直接Copy-Paste。至于StackBlur的基本算法原理,在此就不多说,感兴趣的朋友可以到Github上搜索此项目。这里最后给出一下移植后代码的Demo:FastBlurDemo.zip

时间: 2024-10-13 02:40:34

移植StackBlur模糊算法至SDL的相关文章

快速堆栈模糊算法

上一篇快速高斯模糊的原作者也有另一个比较快速的模糊算法Stack Blur,字面意思为堆栈模糊. 源地址为:http://incubator.quasimondo.com/processing/fast_blur_deluxe.php 这个算法在多个平台上都有实现,安卓以及IOS,JS等. processing源码:http://incubator.quasimondo.com/processing/stackblur.pde 效果图: 转为C语言实现版本. 代码如下: // Stack Blu

干货分享,图片模糊算法,解析xml绘制图片

        项目需求:有一个xml文件,记录了一张图片每个元素的位置,大小,样式信息. 通过XmlResourceParser解析xml文件,得到每个元素的属性. 然后使用Paint绘制元素到Canvas上,得到一张Bitmap位图 将位图模糊处理,处理算法的原理(取图片上每个像素点周围的8个点平均值) 模糊算法: package com.metek.blur; import android.content.Context; import android.graphics.Bitmap; p

快速模糊算法

前段时间在网上看到一个快速模糊算法,性能很不错. 源博客: http://www.lellansin.com/super-fast-blur-%E6%A8%A1%E7%B3%8A%E7%AE%97%E6%B3%95.html 博主对其进行了简单的bug修正以及性能优化. 在博主机子上使用该算法对一张5000x3000的图片进行模糊处理,仅需500-600毫秒,速度非常快. 代码如下: /* * Super Fast Blur v1.1+ * Original author: Mario Klin

最快速的“高斯”模糊算法(附Android源码)

? 这是一个外国人的算法,本人是搬运工.参考:http://blog.ivank.net/fastest-gaussian-blur.html ? 1:高斯模糊算法(参考:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html) 所谓的模糊算法就是当前像素点和周围像素点进行加权均值之后的结果替换当前像素值.因此均值模糊是最简单的,只要将周围的像素点相加取平均值即可. ????而高斯模糊则是将周围的像素点的权值按照高斯分布进行取值,即根据

快速高速模糊算法

刚才发现一份快速高速模糊的实现. 源地址为:http://incubator.quasimondo.com/processing/gaussian_blur_1.php 作者信息为: Fast Gaussian Blur v1.3 by Mario Klingemann <http://incubator.quasimondo.com> processing源码: http://incubator.quasimondo.com/processing/fastblur.pde效果图: 转为C语言

超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。

今天我们来花点时间再次谈谈一个模糊算法,一个超级简单但是又超级牛逼的算法,无论在效果上还是速度上都可以和Boxblur, stackblur或者是Gaussblur想媲美,效果上,比Boxblur来的更平滑,和Gaussblur相似,速度上,经过我的优化,在PC端比他们三个都要快一大截,而且基本不需占用额外的内存,实在是一个绝好的算法. 算法的核心并不是我想到或者发明的,是一个朋友在github上挖掘到的,率属于Cairo这个2D图形库的开源代码,详见: https://github.com/r

基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)

在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后银行会把收款人开户行的联行号连其他信息发到人民银行进行清算,这样能保证以最快的速度汇到收款人的手上.如果联行号不准确,那么在汇款的时候会发生分行落地,支行间调拨等操作,影响导致时间,尤其是跨行汇款的时候.一般银行的代收付接口,都会要求提供此参数. 银行联行号一般是根据输入的分支行信息模糊查询出来的,

PS 滤镜——旋转模糊

这里给出灰度图像的模糊算法,彩色图像只要分别对三个通道做模糊即可. %%  spin blur % 旋转模糊 clc; clear all; close all; I=imread('4.jpg'); I=double(I); % % % I_new=I; % % % for kk=1:3 % % %     I_new(:,:,kk)=Spin_blur_Fun(I(:,:,kk), 30, 30); % % % end % % % imshow(I_new/255) Image=I; Ima

[原]零基础学习SDL开发之在Android使用SDL2.0显示BMP叠加图

关于如何移植在android上使用SDL,可以参考[原]零基础学习SDL开发之移植SDL2.0到Android 和 [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图 . 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示,同时叠加一张图作为背景图. 博主的开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT+NDK 在前面两篇文章我们知道了如何移植SDL2.0到android上面来,并且可以在Android上面来显示一张图片,这篇