拍照显示图片时出现个空指针,没头绪

YXTS122 2021-02-16 03:11:15
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;
}
}
}


...全文
275 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YXTS122 2021-02-19
  • 打赏
  • 举报
回复
public class MainActivity extends Activity {
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Button button = null;
private ImageView imageview = null;
private Uri imageUri = null;
public void InitViews(){
button =(Button)findViewById(R.id.take_photo);
imageview =(ImageView)findViewById(R.id.picture);
}
public void InitEvents(){
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File file = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg");
try {
if (file.exists()) {
file.delete();
}
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(file);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO); // 启动相机程序
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitViews();
InitEvents();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
String path = imageUri.getPath();
FileInputStream fis = new FileInputStream(path);
Bitmap mBitmap = BitmapFactory.decodeStream(fis);

int width = mBitmap.getWidth();
int height = mBitmap.getHeight();

// 保存所有的像素的数组,图片宽×高
int[] pixels = new int[width * height];

mBitmap.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 bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565);
bitmap.eraseColor(color);//填充颜色
imageview.setImageBitmap(bitmap); // 将裁剪后的照片显示出来
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
YXTS122 2021-02-18
  • 打赏
  • 举报
回复
知道了,加多个裁剪程序就不会崩溃了。。。
bdmh 2021-02-16
  • 打赏
  • 举报
回复
看你系统版本,不同版本获取图象时的方法不一样

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧