public class MainActivity extends Activity {
public static final int TAKE_PHOTO=1;
private ImageView picture;
private Uri ImageUri;
private Button takePhoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
picture=(ImageView) findViewById(R.id.picture);
takePhoto= (Button) findViewById(R.id.take_photo);
takePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建File对象,用于存储拍照后的图片
File outputImage=new File(getExternalCacheDir(),"outputImage.jpg");
try {
if (outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if (Build.VERSION.SDK_INT>=24){
ImageUri= FileProvider.getUriForFile(MainActivity.this,
"com.example.camerralbumtest.fileprovider",outputImage);
}else {
ImageUri=Uri.fromFile(outputImage);
}
//启动相机程序
Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,ImageUri);
startActivityForResult(intent,TAKE_PHOTO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case TAKE_PHOTO:
if (resultCode==RESULT_OK){
try {
//将拍摄的照片显示出来
Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(ImageUri));
try{
ArrayList<Integer> picturePixel=BitmapUtil.getPicturePixel(bitmap);
HashMap<Integer,Integer> color2=new HashMap<Integer, Integer>();
for (Integer color:picturePixel){
if (color2.containsKey(color)){
Integer integer = color2.get(color);
integer++;
System.out.println(integer++);
color2.remove(color);
color2.put(color,integer);
}else{
color2.put(color,1);
}
}
//挑选数量最多的颜色
Iterator iter = color2.entrySet().iterator();
int count=0;
int color=0;
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
int value = (Integer) entry.getValue();
if (count<value){
count=value;
color= (Integer) entry.getKey();
}
}
bitmap.eraseColor(color);
picture.setImageBitmap(bitmap);
}
catch (Exception e) {
Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show();
}
System.gc();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show();
}
}
break;
default:
break;
}
}
static class BitmapUtil{
public static ArrayList<Integer> getPicturePixel(Bitmap bitmap)
{
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// 保存所有的像素的数组,图片宽×高
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
ArrayList<Integer> rgb=new ArrayList<Integer>();
for (int i = 0; i < pixels.length; i++) {
int clr = pixels[i];
int red = (clr & 0x00ff0000) >> 16; // 取高两位
int green = (clr & 0x0000ff00) >> 8; // 取中两位
int blue = clr & 0x000000ff; // 取低两位
Log.d("tag", "r=" + red + ",g=" + green + ",b=" + blue);
int color = Color.rgb(red, green, blue); //除去白色和黑色
if (color!=Color.WHITE && color!=Color.BLACK){
rgb.add(color);
}
}
return rgb;
}
}
}