先调用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

更多相关文章

  1. Android(安卓)获取控件宽高
  2. Android实现打电话功能
  3. AndroidTextView的跑马灯效果,解决复杂布局不能获取焦点的问题
  4. Android屏幕尺寸、标题栏高度、状态栏高度、当前View尺寸
  5. Android练习——Spinner二级联动_城市选择
  6. 取消自动获取焦点(默认进来焦点到edittext),取消进入呼出软件盘
  7. Android(安卓)获取手机卡相关信息
  8. Android(安卓)ApiDemos示例解析(140):Views->Layouts->Baseline-
  9. Android(安卓)代码改变图片颜色android:tint="@color/main_color

随机推荐

  1. 优雅的实现 Golang REST API 架构
  2. 使用 Go 来构建一个 CLI 程序
  3. Go String 解析
  4. go语言中一种常见的错误
  5. Golang 开发的 Web 有哪些框架?
  6. Golang 可以开发 Web 吗?
  7. 如何实现golang语言的多态
  8. Golang 能开发前端吗?
  9. golang如何设置字体
  10. Golang 可以写游戏吗?