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>
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.
Bitmap bm=((BitmapDrawable)imageView. getDrawable()). getBitmap();
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.
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);
This is the Kotlin Version
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With