android 将图片转换成黑白图片

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

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		// TODO Auto-generated method stub

		addPic = (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() {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub

			Button 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 {
				// 获得图片的地址Uri
				Uri originalUri = data.getData(); 
				//根据图片的URi生成bitmap
				bm = 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值