¿Cómo adjuntar una imagen de dibujable a gmail?

Estoy tratando de adjuntar una imagen de mi gridview a gmail o facebook, pero cada vez que intenté adjuntar mi aplicación se bloqueó, y recibo el siguiente error con excepción de puntero nulo, el siguiente es mi código con la selección de imagen de gridview, ¿alguien puede ayudarme?

public class Free_Cover_Activity extends AppCompatActivity
{
 GridView grid;
 int[] imageId = {
  R.drawable.discovercover,
  R.drawable.burpresswordfree,
  R.drawable.flyfree,
  R.drawable.cantmovefree,
  R.drawable.cantmovewordfree,
  R.drawable.chalkthisfree,
  R.drawable.fivehundredmetersfree,
  R.drawable.freeexercise,
  R.drawable.gym_smilie,
  R.drawable.hundredcalrairesfree,
  R.drawable.injuryfree,
  R.drawable.jumpropefree,
  R.drawable.nicesnathcfree,
  R.drawable.personglrecordfree,
  R.drawable.posefree,
  R.drawable.pushupfree,
  R.drawable.shoulder,
  R.drawable.timewordfree,
  R.drawable.unbrokernfree,
  R.drawable.weightbeltfree
 };

 private Bitmap mBitmap;
 private Intent email;

 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.free_cover_gridview);
  android.support.v7.app.ActionBar abar =  getSupportActionBar();
  ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#D64365"));
  abar.setBackgroundDrawable(colorDrawable);
  abar.hide();

  CustomGridFreeCover adapter = 
               new CustomGridFreeCover(Free_Cover_Activity.this, imageId);
  grid=(GridView)findViewById(R.id.freecover_grid);
  grid.setAdapter(adapter);
  grid.setOnItemClickListener(new AdapterView.OnItemClickListener()
  {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id)
   {
    try
    {
     Bitmap largeIcon = 
         BitmapFactory.decodeResource(getResources(), R.drawable.discovercover);

     /*
     replace "R.drawable.bubble_green" with the image resource 
     you want to share from drawable
     */
     ByteArrayOutputStream bytes = new ByteArrayOutputStream();
     largeIcon.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

     //you can create a new file name "test.jpg" in sdcard folder.
     File f = 
        new File(Environment.getExternalStorageDirectory() + File.separator + "test.jpg");
     f.createNewFile();

     //write the bytes in file
     FileOutputStream fo = new FileOutputStream(f);
     fo.write(bytes.toByteArray());

     //remember close de FileOutput
     fo.close();
    } catch (IOException e) {
     //TODO Auto-generated catch block
     e.printStackTrace();
    }

    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("image/jpeg");
    //set your subject
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hi"); 
    //set your message
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "How are you"); 

    String imagePath = Environment.getExternalStorageDirectory() 
           + File.separator + "test.jpg";
    File imageFileToShare = new File(imagePath);
    Uri uri = Uri.fromFile(imageFileToShare);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(shareIntent, "Share Image"));
   }
  });
 }

 public class CustomGridFreeCover extends BaseAdapter
 {
  ,private Context mContext;
  //private final String[] web;
  private final int[] Imageid;

  public CustomGridFreeCover(Context c,int[] Imageid )
  {
   mContext = c;
   this.Imageid = Imageid;
   //this.web = web;
  }

  @Override
  public int getCount()
  {
   //TODO Auto-generated method stub
   return Imageid.length;
  }

  @Override
  public Object getItem(int position) {
   //TODO Auto-generated method stub
   return null;
  }

  @Override
  public long getItemId(int position) {
   //TODO Auto-generated method stub
   return 0;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent)
  {
   //TODO Auto-generated method stub
   View grid;
   LayoutInflater inflater = (LayoutInflater) mContext
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null)
    {
     grid = new View(mContext);
     grid = inflater.inflate(R.layout.free_cover_griditem, null);
     //TextView textView = (TextView) grid.findViewById(R.id.grid_text);
     ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image_freecover);
     //textView.setText(web[position]);
     imageView.setImageResource(Imageid[position]);
    } else {
     grid = (View) convertView;
    }
   return grid;
  }
 }
}