Android.Media.Effect Namespace

Provides classes that allow you to apply a variety of visual effects to images and videos.


Provides classes that allow you to apply a variety of visual effects to images and videos. For example, you can easily fix red-eye, convert an image to grayscale, adjust brightness, adjust saturation, rotate an image, apply a fisheye effect, and much more. The system performs all effects processing on the GPU to obtain maximum performance.

For maximum performance, effects are applied directly to OpenGL textures, so your application must have a valid OpenGL context before it can use the effects APIs. The textures to which you apply effects may be from bitmaps, videos or even the camera. However, there are certain restrictions that textures must meet:

  1. They must be bound to a Android.Opengl.GLES20.GlTexture2d texture image
  2. They must contain at least one mipmap level

An Android.Media.Effect.Effect object defines a single media effect that you can apply to an image frame. The basic workflow to create an Android.Media.Effect.Effect is:

  1. Call Android.Media.Effect.EffectContext.CreateWithCurrentGlContext from your OpenGL ES 2.0 context.
  2. Use the returned Android.Media.Effect.EffectContext to call Android.Media.Effect.EffectContext.Factory, which returns an instance of Android.Media.Effect.EffectFactory.
  3. Call Android.Media.Effect.EffectFactory.CreateEffect(string), passing it an effect name from @link}, such as Android.Media.Effect.EffectFactory.EffectFisheye or Android.Media.Effect.EffectFactory.EffectVignette.

You can adjust an effect’s parameters by calling Android.Media.Effect.Effect.SetParameter(string, Java.Lang.Object) and passing a parameter name and parameter value. Each type of effect accepts different parameters, which are documented with the effect name. For example, Android.Media.Effect.EffectFactory.EffectFisheye has one parameter for the scale of the distortion.

To apply an effect on a texture, call Android.Media.Effect.Effect.Apply(int, System.Int32, System.Int32, System.Int32) on the Android.Media.Effect.Effect and pass in the input texture, its width and height, and the output texture. The input texture must be bound to a Android.Opengl.GLES20.GlTexture2d texture image (usually done by calling the Android.Opengl.GLES20.GlTexImage2D(int, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32) function). You may provide multiple mipmap levels. If the output texture has not been bound to a texture image, it will be automatically bound by the effect as a Android.Opengl.GLES20.GlTexture2d and with one mipmap level (0), which will have the same size as the input.

Note: All effects listed in Android.Media.Effect.EffectFactory are guaranteed to be supported. However, some additional effects available from external libraries are not supported by all devices, so you must first check if the desired effect from the external library is supported by calling Android.Media.Effect.EffectFactory.IsEffectSupported(string).


EffectUpdateEventArgsProvides data for the Android.Media.Effect.Effect.Update event.
IEffectUpdateListenerSome effects may issue callbacks to inform the host of changes to the effect state.