import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
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));
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);
}
}
HashMap<Integer,Integer> color2=new HashMap<Integer, Integer>();
for (Integer color:rgb){
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);
System.gc();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
藍色這部分是挑出出現最多的顏色,去掉這段處理的話,拍的照片可以正常顯示在imageview上但是一加上,真機就會黑屏卡死,剛接觸android不太有經驗,希望大家幫我一下
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/259597.html
標籤:移動開發其他問題
上一篇:Android——猜數字小游戲
