|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
很简单OBJCAVFoundation---播放视频相关的库最近正在学习这些算是学iOS开发的一些方法在本系列的后面部分,我们已看过利用RenderScript来含混一张图片,并经由过程一本性能剖析技能办理了此历程的瓶颈。我们发明利用RenderScipt时,实践的含混操纵得十分快。但仍是没法制止Java内存空间与RenderScript内存空间之间位图编码(Marshalling)带来的开支。在这篇文章里,我们将欠亨过内存空间编码来完成含混的功效,看看是不是能够失掉更好的效果。
起首必需供认,关于各类含混算法的Java完成,我并没有做过具体的测试。以是很有大概一些别的算法比我选择的更无效率。我选择的算法来自StackOverflow上YahelBouaziz的回覆,他很分明地相干的模子,而且宣称此算法出格疾速。有批评说这个算法比别的的办法快很多。
我不会在这里反复这个办法,详细的完成能够参考这个资本
里了。我也不会对分歧的含混算法举行申明,注释Yahel的代码是怎样事情的,大概与别的完成举行对照。这些不是完成含混系列文章的重点。假如想懂得更多的信息,这里有一个很好的JavaimageProcessing指南,它利用AWTlibraries完成。固然不要间接在Android上利用,但倒是进修分歧含混算法一个不错的出发点。
我们利用一种分歧的办法来对Yahel的办法举行封装,包含一个TimingLogger。如许能够便利地评价完成效果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
privatevoidblurJava(Bitmapbkg,Viewview,intradius){
TimingLoggertl=newTimingLogger(TAG,"blur");
Bitmapoverlay=Bitmap.createBitmap(
view.getMeasuredWidth(),
view.getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
tl.addSplit("Bitmap.createBitmap()");
Canvascanvas=newCanvas(overlay);
tl.addSplit("newCanvas()");
canvas.drawBitmap(bkg,-view.getLeft(),
-view.getTop(),null);
tl.addSplit("canvas.drawBitmap()");
Bitmapblurred=fastblur(overlay,radius);
tl.addSplit("fastblur()");
view.setBackground(newBitmapDrawable(
getResources(),blurred));
tl.addSplit("view.setBackground()");
tl.dumpToLog();
}
运转后可以失掉以下效果:
<br>
必需批准Yehel的说法,效果看起来很多多少了。一切关头的运转效果体现怎样呢?
1
2
3
4
5
6
7
blur:begin
blur:0ms,Bitmap.createBitmap()
blur:0ms,newCanvas()
blur:1ms,canvas.drawBitmap()
blur:125ms,fastblur()
blur:0ms,view.setBackground()
blur:end,126ms
很少去思考,没有去多问几个为什么。这是学习的大忌,我认识到了自己学习方法上的错误。孔子说,学而不思则罔,思而不学则殆。一点也没错,学和思是要结合的,这样才能进步。现在回想一下,我学到了什么?自己也无言以对了。 |
|