Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing an ImageView to black and white

Tags:

android

I would like to change an ImageView's image to black and white. The only thing is my code allows the user to take a photo, that photo is placed in the imageview. I would like that photo to be black and white. If anyone knows how I could do this, I would appreciate it.

MainActivity:

package com.example.triptych4;  import java.io.File;  import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Gallery; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.Toast;  public class MainActivity extends Activity {       // label our logs "CameraApp3"     private static String logtag = "CameraApp3";     // tells us which camera to take a picture from     private static int TAKE_PICTURE = 1;     // empty variable to hold our image Uri once we store it     private Uri imageUri;      private Integer[] pics = { R.drawable.android, R.drawable.android3d,           R.drawable.background3 };      private ImageView imageView;       @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          Gallery gallery = (Gallery) findViewById(R.id.gallery1);         gallery.setAdapter(new ImageAdapter(this));         imageView = (ImageView) findViewById(R.id.imageView1);          gallery.setOnItemClickListener( new AdapterView.OnItemClickListener() {             @Override             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                      long arg3) {                 Toast.makeText(getApplicationContext(), "pic:" + arg2,                          Toast.LENGTH_SHORT).show();                 imageView.setImageResource(pics[arg2]);             }         });           // look for the button we set in the view         ImageButton cameraButton = (ImageButton)                 findViewById(R.id.button_camera);         // set a listener on the button         cameraButton.setOnClickListener(cameraListener);      }         // set a new listener     private OnClickListener cameraListener = new OnClickListener() {         public void onClick(View v) {             // open the camera and pass in the current view             takePhoto(v);         }     };      public void takePhoto(View v) {         // tell the phone we want to use the camera         Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");         // create a new temp file called pic.jpg in the "pictures" storage area of the phone         File photo = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "pic.jpg");         // take the return data and store it in the temp file "pic.jpg"         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));         // stor the temp photo uri so we can find it later         imageUri = Uri.fromFile(photo);         // start the camera         startActivityForResult(intent, TAKE_PICTURE);      }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     }      public class ImageAdapter extends BaseAdapter{         private Context context;         int imageBackground;          public ImageAdapter(Context context){             this.context = context;         }          @Override         public int getCount() {             // TODO Auto-generated method stub             return pics.length;         }          @Override         public Object getItem(int arg0) {             // TODO Auto-generated method stub             return arg0;         }          @Override         public long getItemId(int arg0) {             // TODO Auto-generated method stub             return arg0;         }          @Override         public View getView(int arg0, View arg1, ViewGroup arg2) {             // TODO Auto-generated method stub             ImageView imageView =new ImageView(context);             imageView.setImageResource(pics[arg0]);             return imageView;         }     }      // override the original activity result function     @Override     public void onActivityResult(int requestCode, int resultCode, Intent data) {         // call the parent         super.onActivityResult(requestCode, resultCode, data);         switch(requestCode) {         // if the requestCode was equal to our camera code (1) then...         case 1:             // if the user took a photo and selected the photo to use             if(resultCode == Activity.RESULT_OK) {                 // get the image uri from earlier                 Uri selectedImage = imageUri;                 // notify any apps of any changes we make                 getContentResolver().notifyChange(selectedImage, null);                 // get the imageView we set in our view earlier                 ImageButton imageButton = (ImageButton)findViewById(R.id.button_camera);                 // create a content resolver object which will allow us to access the image file at the uri above                 ContentResolver cr = getContentResolver();                 // create an empty bitmap object                 Bitmap bitmap;                 try {                     // get the bitmap from the image uri using the content resolver api to get the image                     bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, selectedImage);                     // set the bitmap to the image view                     imageButton.setImageBitmap(bitmap);                     // notify the user                     Toast.makeText(MainActivity.this, selectedImage.toString(), Toast.LENGTH_LONG).show();                 } catch(Exception e) {                     // notify the user                     Toast.makeText(MainActivity.this, "failed to load", Toast.LENGTH_LONG).show();                     Log.e(logtag, e.toString());                 }             }           }       }    } 

Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.example.triptych5.MainActivity" >      <ImageView         android:id="@+id/imageView1"         android:layout_width="200dp"         android:layout_height="200dp"         android:scaleType="fitXY"         android:layout_alignParentBottom="true"         android:layout_alignParentLeft="true"         android:layout_alignParentRight="true"         android:layout_alignTop="@+id/button_camera"/>      <ImageButton         android:id="@+id/button_camera"         android:layout_width="230dp"         android:layout_height="235dp"         android:scaleType="fitXY"         android:rotation="-90"         android:layout_alignParentBottom="true"         android:layout_centerHorizontal="true"         android:background="@drawable/middle4" />      <Gallery         android:id="@+id/gallery1"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:layout_above="@+id/imageView1"         android:layout_alignParentLeft="true"         android:layout_alignParentTop="true" />  </RelativeLayout> 
like image 525
Harrison Avatar asked May 20 '15 04:05

Harrison


People also ask

How do I change a photo to black and white on Android?

Open the image you want to edit in Photos and tap the slider icon in the upper right corner. You'll get taken to Photos in built editor. Next, tap the three overlapping circles icon to access the Filters. There are three black and white filters to choose from: Mono, Tonal and Noir.

How do I turn an ImageView into a bitmap?

Bitmap bm=((BitmapDrawable)imageView. getDrawable()). getBitmap();

Can ImageView be used as button?

ImageView is used when we want to work with images or we want to display them in our application. So, this article will give you a complete idea of using an ImageView as a Button in android studio. So, without wasting further time let's go to the article and read how we can achieve this task.


2 Answers

You can simply achieve this by doing:

ImageView imageview = (ImageView) findViewById(R.id.imageView1); ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0);  ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); imageview.setColorFilter(filter); 
like image 149
Mohib Irshad Avatar answered Sep 30 '22 23:09

Mohib Irshad


This is the Kotlin Version

imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)}) 
like image 42
Riyas Valiyadan Avatar answered Sep 30 '22 22:09

Riyas Valiyadan