Android图像处理之GPUImage for Android
16lz
2021-12-04
GPUImage 是iOS下一个开源的基于GPU的图像处理库,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜。 GPUImage for Android是它在Android下的实现,同样也是开源的,托管在Github上。
版本:android-gpuimage-1.1.1
Android模拟器上不支持OpenGL ES 2.0所以会报错,可以选用 Genymotion测试,或真机上运行。
引用 Caused by: java.lang.IllegalStateException: OpenGL ES 2.0 is not supported on this phone.
(1)使用自定义的ImageView
原图:
sepia后:
gray后:
sharp后:
edge后:
(2) 处理Assets中的文件
(3)使用Photoshop的acv文件
版本:android-gpuimage-1.1.1
Android模拟器上不支持OpenGL ES 2.0所以会报错,可以选用 Genymotion测试,或真机上运行。
引用 Caused by: java.lang.IllegalStateException: OpenGL ES 2.0 is not supported on this phone.
(1)使用自定义的ImageView
<jp.co.cyberagent.android.gpuimage.GPUImageView android:id="@+id/gpuimage" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="1" />
mImageView.setFilter(new GPUImageSepiaFilter()); // sepiamImageView.setFilter(new GPUImageGrayscaleFilter()); // graymImageView.setFilter(new GPUImageSharpenFilter()); // sharpmImageView.setFilter(new GPUImageSobelEdgeDetection()); // edge
原图:
sepia后:
gray后:
sharp后:
edge后:
(2) 处理Assets中的文件
// 读取图像AssetManager as = getAssets();InputStream is = null;Bitmap bitmap = null;try {is = as.open("dog.jpg");bitmap = BitmapFactory.decodeStream(is);is.close();} catch (IOException e) {Log.e("MainActivity", "Error");}// 使用GPUImage处理图像GPUImage gpuImage = new GPUImage(this);gpuImage.setImage(bitmap);gpuImage.setFilter(new GPUImageToonFilter());bitmap = gpuImage.getBitmapWithFilterApplied();// 在ImageView中显示处理后的图像ImageView view = new ImageView(this);view.setImageBitmap(bitmap);setContentView(view);
(3)使用Photoshop的acv文件
// 读取图像AssetManager as = getAssets();InputStream is = null;Bitmap bitmap = null;try {is = as.open("dog.jpg");bitmap = BitmapFactory.decodeStream(is);is.close();} catch (IOException e) {Log.e("MainActivity", "Error");}// 读取Photoshop的acv文件GPUImageToneCurveFilter filter = new GPUImageToneCurveFilter();try {is = as.open("tone_curve.acv");filter.setFromCurveFileInputStream(is);is.close();} catch (IOException e) {Log.e("MainActivity", "Error");}// 使用GPUImage处理图像GPUImage gpuImage = new GPUImage(self);gpuImage.setImage(bitmap);gpuImage.setFilter(filter);bitmap = gpuImage.getBitmapWithFilterApplied();// 在ImageView中显示处理后的图像ImageView view = new ImageView(self);view.setImageBitmap(bitmap);setContentView(view);
更多相关文章
- Android事件分发机制完全解析(终极版)
- 【Android休眠】之Android对PowerKey事件的处理(2)EventHub
- Android(安卓)LayoutInflater的获取及inflate()参数和返回值
- 对android中事件的分发的理解
- Android处理ListView的条目长按事件
- Android的Matrix图像变化原理
- FrameLayout 帧布局
- Mac修改环境变量路径中带空格的处理
- [原]Android应用程序键盘(Keyboard)消息处理机制分析