Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 將圖片轉換成黑白圖片

android 將圖片轉換成黑白圖片

編輯:關於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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved