如何在位图上应用不同的图像效果(滤镜),如棕褐色,黑白,模糊等?

时间:2013-04-30 04:26:22

标签: android image-processing android-image image-editing

我不知道如何对图像应用不同的效果,

我在效果类中见过EffectFactory类和Effect类,有一种方法apply 但我不确定在inputTexId和optputTexId中传递什么,以及从哪里获得新的更新图像,如何在imageView中存储更新的图像,

请帮我解决这个问题。 是否有任何开源库可用于为Image提供效果。

谢谢,

5 个答案:

答案 0 :(得分:9)

我已实施 Jerry's Java Image Processing Library 。对我来说很好。

下载 AndroidJars

修改

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//Find the bitmap's width height
int width = AndroidUtils.getBitmapOfWidth(getResources(), R.drawable.ic_launcher);
int height = AndroidUtils.getBitmapOfHeight(getResources(), R.drawable.ic_launcher);
//Create a filter object.
GaussianFilter filter = new GaussianFilter();
//set???? function to specify the various settings.
filter.setRadius(8.5f);
//Change int Array into a bitmap
int[] src = AndroidUtils.bitmapToIntArray(bitmap);
//Applies a filter.
filter.filter(src, width, height);
//Change the Bitmap int Array (Supports only ARGB_8888)
Bitmap dstBitmap = Bitmap.createBitmap(src, width, height, Config.ARGB_8888);

Android-jhlabs

中查找更多详细信息

答案 1 :(得分:6)

您可以使用Catalano Framework:

http://code.google.com/p/catalano-framework/

FastBitmap image = new FastBitmap(bitmap);
image.toRGB();

//Sepia
Sepia sepia = new Sepia();
sepia.applyInPlace(image);

//Blur
Blur blur = new Blur();
blur.applyInPlace(image);

//Emboss
Emboss emboss = new Emboss();
emboss.applyInPlace(image);

//Retrieve bitmap
bitmap = fb.toBitmap();

答案 2 :(得分:5)

是的,你可以使用aviary sdk来使用很多效果..

访问http://www.aviary.com/android

对于更高级的效果,您可以使用Opencv ..这些是最好的..

答案 3 :(得分:2)

您还可以尝试this项目处理多个Bitmap Processing

过滤器: -

  • 提升颜色
  • 亮度
  • 颜色深度
  • 滤色镜
  • 对比度
  • 浮雕
  • 翻转和旋转
  • 伽玛
  • 高斯模糊
  • 灰度
  • 色相
  • 反转
  • 噪声
  • 饱和度
  • 棕褐色
  • 锐化
  • 草图
  • 色调
  • 晕影

由于它是在Java中进行像素标签处理,因此它没有大多数基于C ++的库那么快,但如果位图大小不是很大,例如缩略图,那么它的效果很好。

答案 4 :(得分:1)

这是一个优秀的图书馆,易于与gradle集成,它很快 高效,节省了我的一天:

https://github.com/wasabeef/picasso-transformations

这是一个如何使用的例子:

 Transformation trans1 = new ContrastFilterTransformation(getActivity(), 1.5f);
                        Transformation trans2 = new BrightnessFilterTransformation(getActivity(), 0.2f);
                        Picasso.with(getActivity()).load(uri)
                                .transform(trans1).transform(trans2).into(imageview3);