在Android中添加手机相册的图片并对图片进行灰度处理

我是个刚开始学的小白从今年10月分才接触java,在Android中添加手机相册的图片并对图片进行灰度处理这个问题困扰了我很久,我自己买了发哥的视频跟着学,现在学到安卓入门,无意之间想做个东西,但是在网上找了好久没有直接一套的代码,要么直接图像处理,要么就仅仅从手机中添加图片。以下是我借鉴了发哥的方法和其他道友的方法结合起来做出。
在这里插入图片描述

点加载按钮
在这里插入图片描述

点二值化
在这里插入图片描述

以上就是效果展示
具体代码如下:
首先在AndrodMainifest.xml文件中声明权限:

另外在activity_mian.xml中配置:

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android=“http://schemas.android.com/apk/res/android
xmlns:app=“http://schemas.android.com/apk/res-auto
xmlns:tools=“http://schemas.android.com/tools
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=“example.demo0802.MainActivity”>

<ImageView
    android:id="@+id/id_imageview"
    android:layout_width="228dp"
    android:layout_height="176dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:background="#ddd"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@null"/>

<Button
    android:id="@+id/id_select"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:background="#333399"
    android:onClick="goSelect"
    android:padding="10dp"
    android:text="选取照片"
    android:textColor="#fff"
    android:textSize="18sp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/id_imageview"/>

</android.support.constraint.ConstraintLayout>

在MianActivity中代码如下:
package com.example.myapplication;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
private Button button;
private ImageView image;
private Bitmap bitmap;
final int REQ_PICK_IMAGE = 1001;
final String TAG = “测试MainActivity”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermissions(); // 检查权限
}
public boolean checkPermissions()
{
// 本app需要以下权限
final String[] ps = { Manifest.permission.READ_EXTERNAL_STORAGE };

    // 检查是否有这些权限
    int rc = ActivityCompat.checkSelfPermission(this,ps[0]);
    if (rc != PackageManager.PERMISSION_GRANTED)
    {
        ActivityCompat.requestPermissions(this, ps, 0);
        return false;
    }
    return true;
}

// 点击 "选择图片"按钮
public void goSelect(View view)
{
    Uri uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    Intent intent = new Intent( Intent.ACTION_PICK, uri);
    startActivityForResult(intent, REQ_PICK_IMAGE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == REQ_PICK_IMAGE)
    {
        if(resultCode == RESULT_OK)
        {
            Uri imageUri = data.getData();

            // 取出文件路径 ( 以下写法基本固定, 照抄即可, 不是本节课的重点 )
            // 其实这是又用imageUri作了一次查询操作,查询结果里有图片文件的路径
            String[] projection = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver()
                    .query(imageUri, projection, null, null, null);
            cursor.moveToFirst();
            int column = cursor.getColumnIndex(projection[0]);
            String imagePath = cursor.getString(column);
            Log.d(TAG, "选中文件的路径:" + imagePath);

            // 读取图片并显示
            Drawable image = Drawable.createFromPath(imagePath);
            ImageView imageView = (ImageView) findViewById(R.id.id_imageview);
            imageView.setImageDrawable(image);
            if(image!=null){
               onShow();
            }
        }
    }
}
private void onShow() {
    image= (ImageView) findViewById(R.id.id_imageview);
    button = (Button) findViewById(R.id.id_button);

    bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap bm = ImageTools.toGrayscale(bitmap);
            image.setImageBitmap(bm);
        }
    });
}

}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值