title: how to apply effects on selected image from gallery in android?
body: <p>Actually I tried for "effects on image" that image was there in drawable folder by using Effectsfactory class. Its working fine.
  Actually I used this link "<a href="http://grishma102.blogspot.in/2013/10/apply-effects-on-image-using-effects.html" rel="nofollow">http://grishma102.blogspot.in/2013/10/apply-effects-on-image-using-effects.html</a>" for this code.
  The code I used was..</p>
  
  <pre><code>import android.annotation.SuppressLint;
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Color;
  import android.os.Build;
  import android.os.Bundle;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  import android.view.Window;
  import android.media.effect.Effect;
  import android.media.effect.EffectContext;
  import android.media.effect.EffectFactory;
  import android.opengl.GLES20;
  import android.opengl.GLSurfaceView;
  import android.opengl.GLUtils;
  import javax.microedition.khronos.egl.EGLConfig;
  import javax.microedition.khronos.opengles.GL10;
  
   public class MainActivity extends Activity implements GLSurfaceView.Renderer {
  
      private GLSurfaceView mEffectView;
      private int[] mTextures = new int[2];
      private EffectContext mEffectContext;
      private Effect mEffect;
      private ThirdActivity mTexRenderer = new ThirdActivity();
      private int mImageWidth;
      private int mImageHeight;
      private boolean mInitialized = false;
      int mCurrentEffect;
  
      public void setCurrentEffect(int effect) {
          mCurrentEffect = effect;
      }
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.activity_main);
          /**
           * Initialise the renderer and tell it to only render when
           * Explicit requested with the RENDERMODE_WHEN_DIRTY option
           */
          mEffectView = (GLSurfaceView) findViewById(R.id.effectsview);
          mEffectView.setEGLContextClientVersion(2);
          mEffectView.setRenderer(this);
          mEffectView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
          mCurrentEffect = R.id.none;
      }
  
      private void loadTextures() {
          // Generate textures
          GLES20.glGenTextures(2, mTextures, 0);
  
          // Load input bitmap
          Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.puppy);
          mImageWidth = bitmap.getWidth();
          mImageHeight = bitmap.getHeight();
          mTexRenderer.updateTextureSize(mImageWidth, mImageHeight);
  
          // Upload to texture
          GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
          GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
  
          // Set texture parameters
          SecondActivity.initTexParams();
      }
  
      @SuppressLint("InlinedApi") @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void initEffect() {
          EffectFactory effectFactory = mEffectContext.getFactory();
          if (mEffect != null) {
              mEffect.release();
          }
          /**
           * Initialize the correct effect based on the selected menu/action item
           */
          switch (mCurrentEffect) {
  
              case R.id.none:
                  break;
  
              case R.id.autofix:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_AUTOFIX);
                  mEffect.setParameter("scale", 0.5f);
                  break;
  
              case R.id.bw:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_BLACKWHITE);
                  mEffect.setParameter("black", .1f);
                  mEffect.setParameter("white", .7f);
                  break;
  
              case R.id.brightness:
                  mEffect = effectFactory.createEffect (EffectFactory.EFFECT_BRIGHTNESS);
                  mEffect.setParameter("brightness", 2.0f);
                  break;
  
              case R.id.contrast:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_CONTRAST);
                  mEffect.setParameter("contrast", 1.4f);
                  break;
  
              case R.id.crossprocess:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_CROSSPROCESS);
                  break;
  
              case R.id.documentary:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_DOCUMENTARY);
                  break;
  
              case R.id.duotone:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_DUOTONE);
                  mEffect.setParameter("first_color", Color.YELLOW);
                  mEffect.setParameter("second_color", Color.DKGRAY);
                  break;
  
              case R.id.filllight:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FILLLIGHT);
                  mEffect.setParameter("strength", .8f);
                  break;
  
              case R.id.fisheye:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FISHEYE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              case R.id.flipvert:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FLIP);
                  mEffect.setParameter("vertical", true);
                  break;
  
              case R.id.fliphor:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FLIP);
                  mEffect.setParameter("horizontal", true);
                  break;
  
              case R.id.grain:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_GRAIN);
                  mEffect.setParameter("strength", 1.0f);
                  break;
  
              case R.id.grayscale:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_GRAYSCALE);
                  break;
  
              case R.id.lomoish:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_LOMOISH);
                  break;
  
              case R.id.negative:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_NEGATIVE);
                  break;
  
              case R.id.posterize:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_POSTERIZE);
                  break;
  
              case R.id.rotate:
                  mEffect = effectFactory.createEffect( EffectFactory.EFFECT_ROTATE);
                  mEffect.setParameter("angle", 180);
                  break;
  
              case R.id.saturate:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SATURATE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              case R.id.sepia:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SEPIA);
                  break;
  
              case R.id.sharpen:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_SHARPEN);
                  break;
  
              case R.id.temperature:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_TEMPERATURE);
                  mEffect.setParameter("scale", .9f);
                  break;
  
              case R.id.tint:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_TINT);
                  mEffect.setParameter("tint", Color.MAGENTA);
                  break;
  
              case R.id.vignette:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_VIGNETTE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              default:
                  break;
  
          }
      }
  
      @SuppressLint("NewApi") private void applyEffect() {
          mEffect.apply(mTextures[0], mImageWidth, mImageHeight, mTextures[1]);
      }
  
      private void renderResult() {
          if (mCurrentEffect != R.id.none) {
              // if no effect is chosen, just render the original bitmap
              mTexRenderer.renderTexture(mTextures[1]);
          }
          else {
              // render the result of applyEffect()
              mTexRenderer.renderTexture(mTextures[0]);
          }
      }
  
      @SuppressLint("NewApi") @Override
      public void onDrawFrame(GL10 gl) {
          if (!mInitialized) {
              //Only need to do this once
              mEffectContext = EffectContext.createWithCurrentGlContext();
              mTexRenderer.init();
              loadTextures();
              mInitialized = true;
          }
          if (mCurrentEffect != R.id.none) {
              //if an effect is chosen initialize it and apply it to the texture
              initEffect();
              applyEffect();
          }
          renderResult();
      }
  
      @Override
      public void onSurfaceChanged(GL10 gl, int width, int height) {
          if (mTexRenderer != null) {
              mTexRenderer.updateViewSize(width, height);
          }
      }
  
      @Override
      public void onSurfaceCreated(GL10 gl, EGLConfig config) {
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          setCurrentEffect(item.getItemId());
          mEffectView.requestRender();
          return true;
      }
  
  }
  </code></pre>
  
  <p>But I want to select image from gallery and for that image I want to apply effects. For that I used this code</p>
  
  <pre><code>import javax.microedition.khronos.egl.EGLConfig;
  import javax.microedition.khronos.opengles.GL10;
  import android.annotation.SuppressLint;
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.content.Intent;
  import android.database.Cursor;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Color;
  import android.media.effect.Effect;
  import android.media.effect.EffectContext;
  import android.media.effect.EffectFactory;
  import android.net.Uri;
  import android.opengl.GLES20;
  import android.opengl.GLSurfaceView;
  import android.opengl.GLUtils;
  import android.os.Build;
  import android.os.Bundle;
  import android.provider.MediaStore;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.Window;
  import android.widget.Button;
  import android.widget.ImageView;
  
   public class MainActivity extends Activity implements GLSurfaceView.Renderer {
  
       private static int RESULT_LOAD_IMAGE = 1;
  
      private GLSurfaceView mEffectView;
      private int[] mTextures = new int[2];
      private EffectContext mEffectContext;
      private Effect mEffect;
      private ThirdActivity mTexRenderer = new ThirdActivity();
      private int mImageWidth;
      private int mImageHeight;
      private boolean mInitialized = false;
      int mCurrentEffect;
    // private Bitmap bitmap;
  
      public void setCurrentEffect(int effect) {
          mCurrentEffect = effect;
      }
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.activity_main);
          Button buttonLoadImage = (Button) findViewById(R.id.button1);
          buttonLoadImage.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View arg0) {
  
                  Intent i = new Intent(
                          Intent.ACTION_PICK,
                          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  
                  startActivityForResult(i, RESULT_LOAD_IMAGE);
              }
          });
  
  
          /**
           * Initialise the renderer and tell it to only render when
           * Explicit requested with the RENDERMODE_WHEN_DIRTY option
           */
          mEffectView = (GLSurfaceView) findViewById(R.id.effectsview);
          mEffectView.setEGLContextClientVersion(2);
          mEffectView.setRenderer(this);
          mEffectView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
          mCurrentEffect = R.id.none;
      }
  
      private void loadTextures() {
          // Generate textures
          GLES20.glGenTextures(2, mTextures, 0);
  
          // Load input bitmap
         // Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.puppy);
         Bitmap bitmap =BitmapFactory.decodeResource(getResources(),R.id.imgView);
  
  
          mImageWidth = bitmap.getWidth();
          mImageHeight = bitmap.getHeight();
          mTexRenderer.updateTextureSize(mImageWidth, mImageHeight);
  
          // Upload to texture
          GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
          GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
  
          // Set texture parameters
          SecondActivity.initTexParams();
          }
  
      @SuppressLint("InlinedApi") @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void initEffect() {
          EffectFactory effectFactory = mEffectContext.getFactory();
          if (mEffect != null) {
              mEffect.release();
          }
          /**
           * Initialize the correct effect based on the selected menu/action item
           */
          switch (mCurrentEffect) {
  
              case R.id.none:
                  break;
  
              case R.id.autofix:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_AUTOFIX);
                  mEffect.setParameter("scale", 0.5f);
                  break;
  
              case R.id.bw:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_BLACKWHITE);
                  mEffect.setParameter("black", .1f);
                  mEffect.setParameter("white", .7f);
                  break;
  
              case R.id.brightness:
                  mEffect = effectFactory.createEffect (EffectFactory.EFFECT_BRIGHTNESS);
                  mEffect.setParameter("brightness", 2.0f);
                  break;
  
              case R.id.contrast:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_CONTRAST);
                  mEffect.setParameter("contrast", 1.4f);
                  break;
  
              case R.id.crossprocess:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_CROSSPROCESS);
                  break;
  
              case R.id.documentary:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_DOCUMENTARY);
                  break;
  
              case R.id.duotone:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_DUOTONE);
                  mEffect.setParameter("first_color", Color.YELLOW);
                  mEffect.setParameter("second_color", Color.DKGRAY);
                  break;
  
              case R.id.filllight:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FILLLIGHT);
                  mEffect.setParameter("strength", .8f);
                  break;
  
              case R.id.fisheye:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FISHEYE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              case R.id.flipvert:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FLIP);
                  mEffect.setParameter("vertical", true);
                  break;
  
              case R.id.fliphor:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_FLIP);
                  mEffect.setParameter("horizontal", true);
                  break;
  
              case R.id.grain:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_GRAIN);
                  mEffect.setParameter("strength", 1.0f);
                  break;
  
              case R.id.grayscale:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_GRAYSCALE);
                  break;
  
              case R.id.lomoish:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_LOMOISH);
                  break;
  
              case R.id.negative:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_NEGATIVE);
                  break;
  
              case R.id.posterize:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_POSTERIZE);
                  break;
  
              case R.id.rotate:
                  mEffect = effectFactory.createEffect( EffectFactory.EFFECT_ROTATE);
                  mEffect.setParameter("angle", 180);
                  break;
  
              case R.id.saturate:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SATURATE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              case R.id.sepia:
                  mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SEPIA);
                  break;
  
              case R.id.sharpen:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_SHARPEN);
                  break;
  
              case R.id.temperature:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_TEMPERATURE);
                  mEffect.setParameter("scale", .9f);
                  break;
  
              case R.id.tint:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_TINT);
                  mEffect.setParameter("tint", Color.MAGENTA);
                  break;
  
              case R.id.vignette:
                  mEffect = effectFactory.createEffect(
                          EffectFactory.EFFECT_VIGNETTE);
                  mEffect.setParameter("scale", .5f);
                  break;
  
              default:
                  break;
  
          }
      }
  
      @SuppressLint("NewApi") private void applyEffect() {
          mEffect.apply(mTextures[0], mImageWidth, mImageHeight, mTextures[1]);
      }
  
      private void renderResult() {
          if (mCurrentEffect != R.id.none) {
              // if no effect is chosen, just render the original bitmap
              mTexRenderer.renderTexture(mTextures[1]);
          }
          else {
              // render the result of applyEffect()
              mTexRenderer.renderTexture(mTextures[0]);
          }
      }
  
      @SuppressLint("NewApi") @Override
      public void onDrawFrame(GL10 gl) {
          if (!mInitialized) {
              //Only need to do this once
              mEffectContext = EffectContext.createWithCurrentGlContext();
              mTexRenderer.init();
              loadTextures();
              mInitialized = true;
          }
          if (mCurrentEffect != R.id.none) {
              //if an effect is chosen initialize it and apply it to the texture
              initEffect();
              applyEffect();
          }
          renderResult();
      }
  
      @Override
      public void onSurfaceChanged(GL10 gl, int width, int height) {
          if (mTexRenderer != null) {
              mTexRenderer.updateViewSize(width, height);
          }
      }
  
      @Override
      public void onSurfaceCreated(GL10 gl, EGLConfig config) {
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          setCurrentEffect(item.getItemId());
          mEffectView.requestRender();
          return true;
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
  
          if (requestCode == RESULT_LOAD_IMAGE &amp;&amp; resultCode == RESULT_OK &amp;&amp; null != data) {
              Uri selectedImage = data.getData();
              String[] filePathColumn = { MediaStore.Images.Media.DATA };
  
              Cursor cursor = getContentResolver().query(selectedImage,
                      filePathColumn, null, null, null);
              cursor.moveToFirst();
  
              int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
              String picturePath = cursor.getString(columnIndex);
  
              cursor.close();
  
                  ImageView imageView = (ImageView) findViewById(R.id.imgView);
                  imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
  
          }
  
      }
  
  }
  </code></pre>
  
  <p>But it was showing following error</p>
  
  <p>01-27 15:21:19.010: E/AndroidRuntime(26361): FATAL EXCEPTION: GLThread 2743
  01-27 15:21:19.010: E/AndroidRuntime(26361): java.lang.NullPointerException
  01-27 15:21:19.010: E/AndroidRuntime(26361):    at com.example.imageeffect.MainActivity.loadTextures(MainActivity.java:92)
  01-27 15:21:19.010: E/AndroidRuntime(26361):    at com.example.imageeffect.MainActivity.onDrawFrame(MainActivity.java:270)
  01-27 15:21:19.010: E/AndroidRuntime(26361):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1464)
  01-27 15:21:19.010: E/AndroidRuntime(26361):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:121</p>
  
  <p>please help me in solving this issue.</p>