標籤: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;@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
android 將圖片轉換成黑白圖片