android 将图片转换成黑白图片

来源:互联网 发布:网络交流方式 编辑:程序博客网 时间:2024/04/30 12:14

先调用android的系统工具,获取图片生成bitmap文件,再使用android中的二值化技术,将图片转化成黑白图片,主界面代码:

package com.example.blackwhite;import java.io.IOException;import android.media.ThumbnailUtils;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity {private final String IMAGE_TYPE = "image/*";private final int IMAGE_CODE = 0; // 这里的IMAGE_CODE是自己任意定义的private Button addPic = null;private ImageView imgShow = null;private TextView imgPath = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {// TODO Auto-generated method stubaddPic = (Button) findViewById(R.id.btn_add);imgPath = (TextView) findViewById(R.id.img_path);imgShow = (ImageView) findViewById(R.id.imgShow);addPic.setOnClickListener(listener);}private OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubButton btn = (Button) v;switch (btn.getId()) {case R.id.btn_add:setImage();break;}}private void setImage() {// TODO Auto-generated method stub// 使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片的地址Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);getAlbum.setType(IMAGE_TYPE);startActivityForResult(getAlbum, IMAGE_CODE);}};protected void onActivityResult(int requestCode, int resultCode, Intent data) {//  RESULT_OK 是系统自定义得一个常量if (resultCode != RESULT_OK) { Log.e("onActivityResult", "返回的resultCode出错");return;}Bitmap bm = null;// 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口ContentResolver resolver = getContentResolver();// 判断接收的Activity是不是选择图片的if (requestCode == IMAGE_CODE) {try {// 获得图片的地址UriUri originalUri = data.getData(); //根据图片的URi生成bitmapbm = MediaStore.Images.Media.getBitmap(resolver, originalUri);//将图片转化成黑白图片bm =convertToBlackWhite(bm);//显得到bitmap图片imgShow.setImageBitmap(bm);// 新建一个字符串数组用于存储图片地址数据。String[] proj = { MediaStore.Images.Media.DATA };// android系统提供的接口,用于根据uri获取数据Cursor cursor = managedQuery(originalUri, proj, null, null,null);// 获得用户选择图片的索引值int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);// 将游标移至开头 ,防止引起队列越界cursor.moveToFirst();// 根据索引值获取图片路径String path = cursor.getString(column_index);imgPath.setText(path);} catch (IOException e) {Log.e("getImg", e.toString());}}}/*** 将彩色图转换为纯黑白二色* * @param 位图* @return 返回转换好的位图*/public static Bitmap convertToBlackWhite(Bitmap bmp) {int width = bmp.getWidth(); // 获取位图的宽int height = bmp.getHeight(); // 获取位图的高int[] pixels = new int[width * height]; // 通过位图的大小创建像素点数组bmp.getPixels(pixels, 0, width, 0, 0, width, height);int alpha = 0xFF << 24;for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {int grey = pixels[width * i + j];//分离三原色int red = ((grey & 0x00FF0000) >> 16);int green = ((grey & 0x0000FF00) >> 8);int blue = (grey & 0x000000FF);//转化成灰度像素grey = (int) (red * 0.3 + green * 0.59 + blue * 0.11);grey = alpha | (grey << 16) | (grey << 8) | grey;pixels[width * i + j] = grey;}}//新建图片Bitmap newBmp = Bitmap.createBitmap(width, height, Config.RGB_565);//设置图片数据newBmp.setPixels(pixels, 0, width, 0, 0, width, height);Bitmap resizeBmp = ThumbnailUtils.extractThumbnail(newBmp, 380, 460);return resizeBmp;}}

示例代码地址:http://download.csdn.net/detail/stop_pig/8211315

0 1
原创粉丝点击