編輯:關於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;
}
}
Android中的各種保活1
目前市面上的應用,貌似除了微信和手Q都會比較擔心被用戶或者系統(廠商)殺死問題。本文對 Android 進程拉活進行一個總結。Android 進程拉活包括兩個層面:A.
Android 5.0 SharedElement 簡單應用分析(adp-activity-transitions)
好久沒寫點東西了,最近看到了一個轉場動畫比較酷炫,今天就來簡單滴分析一下。先看下今天的效果圖。分析下效果: 進入詳情頁的時候有共享元素,圓形動畫,文字部分的上移動畫,源碼
自定義GridView的使用(盒子應用)
突然發現好久沒有寫博客了,一直放到筆記裡面,今天update一下。最近做的一個項目中,是盒子+電視,用戶通過遙控器來操作。這裡只是說下GridView在當前業務下的簡單使
Android自定義下拉刷新上拉加載
本文實例為大家分享了Android自定義下拉刷新上拉加載的具體實現步驟,供大家參考,具體內容如下實現的方式是SwipeRefreshLayout + RecyclerVi