> RenderScript
Google 官方RenderScript- https://developer.android.com/guide/topics/renderscript/compute
RenderScript在Android 3.0引入,而一些内置的compute kernel在JELLY_BEAN_MR1中引入,为了在低版本手机中使用这些特性,我们不得不引入renderscript_v8兼容包。Renderscript,这是一个功能强大的图形处理“引擎”。
RenderScript是Adnroid3.0引进的用来在Android上写高性能代码的一种语言,语法给予C语言的C99标准,他的结构是独立的,所以不需要为不同的CPU或者GPU定制代码代码。
RenderScript(并行计算技术)是运行在Android系统上的一个高性能密集计算框架。RenderScript主要面向并行数据的计算,当然也可以使串行数据计算的负载受益。RenderScript运行时会在一台设备所有可用处理器上并行工作,比如多核的CPU、GPU或者DSP,这使得你可以专注于算法,而不是任务调度或者负载平衡。RenderScript在应用程序执行图像处理,计算摄影或者计算机视觉等方面都非常有用。
RenderScript两个很重要的概念是需要了解的:高性能的计算内核是通过衍生自C99的语言编写的。有专用的Java API用于管理RenderScript的资源生命周期以及控制内核的执行。
RenderScript demo- https://github.com/desaco1989/Fun_Sobel_RenderScript_Filter
RenderScript Demo- https://github.com/CoXier/RenderScript
Android中OpenGL滤镜和RenderScript图片处理- https://www.jianshu.com/p/66d0fcb902ab
Android中滤镜使用OpenGL和RenderScript处理图片- https://github.com/liweiping1314521/RiemannCamera/
Android5.0下毛玻璃(磨砂)效果实现,图片高斯模糊blur- https://blog.csdn.net/ShareUs/article/details/50420491
-- OpenCV库
OpenCV库来进行滤镜和图片的处理。处理每一帧的图片,OpenGL和RenderScript脚本处理的相当快,它们的运算都是使用GPU去渲染的,而OpenCV的处理速度取决于CPU的执行速度。
-- opencl 和Renderscript总结- https://www.cnblogs.com/zsychanpin/p/7040566.html
在android上要开发opencl。手机端要有libopencl.so文件(也就是opencl驱动)。可是如今android手机端非常少有这个文件。原因是尽管AMD、Intel、NVIDIA、苹果等支持opencl,可是google好像不太支持opencl。在移动端,google有RenderScript(渲染脚本。也是基于异构计算的思想实现的API,长处是跨平台性好,适合各种android操作系统,可是性能比opencl稍差点)。
因此大部分android手机支持RenderScript,却非常少有支持opencl的。
Android使用Sobel算法提取图片轮廓- https://github.com/zl-leaf/GraphicLib
--- eclipse的project.properties加上:
renderscript.target=18
renderscript.support.mode=true
--- Studio Gradle 加上:
android{
defaultConfig{
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
}
}
> 1.RenderScript实现高斯模糊 ScriptIntrinsicBlur类,大致就是将图片实现高斯模糊。
为了防止出现有的机型兼容问题,最好将renderscript-v8.jar
/**
* 高斯模糊
* @param bitmap src
* @param radius the radius of blur ,max is 25
* @param context
* @return a blur bitmap
*/
public static Bitmap blurBitmap(Bitmap bitmap, float radius, Context context) {
//Create renderscript
RenderScript rs = RenderScript.create(context);
//Create allocation from Bitmap
Allocation allocation = Allocation.createFromBitmap(rs, bitmap);
Type t = allocation.getType();
//Create allocation with the same type
Allocation blurredAllocation = Allocation.createTyped(rs, t);
//Create blur script
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
//Set blur radius (maximum 25.0)
blurScript.setRadius(radius);
//Set input for script
blurScript.setInput(allocation);
//Call script for output allocation
blurScript.forEach(blurredAllocation);
//Copy script result into bitmap
blurredAllocation.copyTo(bitmap);
//Destroy everything to free memory
allocation.destroy();
blurredAllocation.destroy();
blurScript.destroy();
t.destroy();
rs.destroy();
return bitmap;
}
2.Magnifier Image,实现放大镜效果
3.Sketch Image实现素描效果,处理的算法很简单:
求RGB平均值Avg = (R + G + B) / 3,如果Avg >= 100,则新的颜色值为R=G=B=255;如果Avg < 100,则新的颜色值为R=G=B=0;255就是白色,0就是黑色;至于为什么用100作比较,这是一个经验值吧,设置为128也可以,可以根据效果来调整。
> RenderScript与OpenGL Shader
using RenderScript for graphical purposes。a graphics library such as OpenGL。
renderscript-v8.jar:android.support.v8.renderscript.Allocation;android.support.v8.renderscript.RenderScript;
RenderScript是Android平台的一种类C的高性能编程语言,用于3D渲染和处理密集型计算。
RenderScript高斯模糊,对图像像素点的每一行中的每一点做水平方向的均值滤波操作。对图像数据的处理。在实际应用中RenderScript常常被用作图层的3D或者2D的图形渲染。比如像现在Android中的动态壁纸大部分使用的方法都是使用RS来进行图形的渲染达到的。
RenderScript在机器上进行第一遍编译,然后在目标设备上进行最后一遍编译(Just-In-TimeCompiling),因而带来更高效的原生二进制代码。这也就是意味着,凡是支持RenderScript的设备都可以运行你的代码。不用管什么架构。
着色器(Shader)是用来实现图像渲染的 用来代替固定渲染管线的可编辑程序。
openGL 1.1不支持shader语言,2.0支持;图形变换或者特效有shader language的支持可以大幅提升性能。
renderscript available on a device, such as multi-core CPUs and GPUs. ,类c脚本引擎,被google收购了。RenderScript is especially useful for applications performing image processing, computational photography, or computer vision.可以写一些耗计算或者渲染3d图形的脚本,它本身也调用底层opengl接口??,因此和上层的java opengles接口功能上有些重复,在android运用的实践中已经证明比java程序的性能要好。一般用来辅助支持现有的java程序,它能和java主程序通信。树叶动态壁纸就是运用renderscript的例子。
-- 使用OpenGL绘图
Android支持使用OpenGL API的高性能绘图,这是Android可用的最高级的绘图机制,在游戏类对性能要求较高的应用中得到广泛使用。Android 4.3最大的改变,就是支持OpenGL ES 3.0。相比2.0,3.0有更多的缓冲区对象、增加了新的着色语言、增加多纹理支持等等,将为Android游戏带来更出色的视觉体验。
Android高级模糊技术学习- https://blog.csdn.net/zhuawalibai/article/details/80050535
高斯模糊效果实现方案及性能对比- https://blog.csdn.net/huli870715/article/details/39378349
Android StackBlur高斯模糊- https://github.com/kikoso/android-stackblur
Android中滤镜使用OpenGL和RenderScript处理图片- https://github.com/liweiping1314521/RiemannCamera/
> 图像处理:
RenderScript是Android系统中能高效处理大量计算任务的框架,特别适用一些需要处理图片和加载图片以及计算机视觉的方面应用。RenderScript是Adnroid3.0引进的.Renderscript是用C99(C的一种标准)实现的。轮廓提取算法是Sobel边缘检测。
Android自动手绘,圆你儿时画家梦- https://blog.csdn.net/huachao1001/article/details/51518322
-- 图像处理,图像的矩阵运算;argb, 矩阵,像素点对图片进行修改;图片的色相/饱和度/亮度
ColorMatrix :RGBA~利用自带的方法修改色调,饱和度,亮度来修改图片;矩阵~利用矩阵计算得到新的矩阵修改图片。
像素点~根据原像素点数组,经过计算得到新的像素点数组,再重新绘制图片。
前端Canvas简单的智能抠图功能- https://github.com/monkeyWangs/Matting
-- 常见的图像特效处理算法(基于android)- https://www.jianshu.com/p/f2732b426e40
Android使用 argb, 矩阵,像素点对图片进行修改- https://github.com/JackieSCN/HandleImage
public static Bitmap getChangedBitmap(Bitmap resource,
float hue,
float saturation,
float lum){
Bitmap out = Bitmap.createBitmap(resource.getWidth()
,resource.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(out);
Paint paint = new Paint();
paint.setAntiAlias(true);//抗锯齿
//调整饱和度
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(saturation);
//调整色相
ColorMatrix hueMatrix = new ColorMatrix();
hueMatrix.setRotate(0,hue);//调整红像素的色相
hueMatrix.setRotate(1,hue);
hueMatrix.setRotate(2,hue);
//调整亮度
ColorMatrix lumMatrix = new ColorMatrix();
lumMatrix.setScale(lum,lum,lum,1);
//把色相/饱和度/明度 合并成一个ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.postConcat(hueMatrix);
colorMatrix.postConcat(saturationMatrix);
colorMatrix.postConcat(lumMatrix);
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
canvas.drawBitmap(resource,0,0,paint);
return out;
}