java - 我想提取我点击的图像像素的 rgb 值,但每当我点击它时。即使所有语法都正确,它也会崩溃
问题描述
package com.example.camdetect;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.graphics.Bitmap;
import com.skydoves.colorpickerview.ColorEnvelope;
import com.skydoves.colorpickerview.ColorPickerView;
import com.skydoves.colorpickerview.listeners.ColorListener;
public class MainActivity extends AppCompatActivity {
public int[] s = new int [4];
private static final int REQUEST_IMAGE_CAPTURE = 1;
private ImageView imageview;
private TextView i_b,i_g,i_r,p_r,p_g,p_b;//**these are declared globally to avoid declaring it final**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
i_b = this.findViewById(R.id.i_b);
i_g = this.findViewById(R.id.i_g);
i_r = this.findViewById(R.id.i_r);
p_r = this.findViewById(R.id.p_r);
p_g = this.findViewById(R.id.p_g);
p_b = this.findViewById(R.id.p_b);
ColorPickerView colorPickerView = findViewById(R.id.colorPickerView);
imageview = this.findViewById(R.id.imageview);
托盘选择颜色
colorPickerView.setColorListener(new ColorListener() {
@Override
public void onColorSelected(int color, boolean fromUser) {
ColorEnvelope colorenvelope = new ColorEnvelope(color);
int c[] = colorenvelope.getArgb();
p_r.setText(String.valueOf(c[1]));
p_g.setText(String.valueOf(c[2]));
p_b.setText(String.valueOf(c[3]));
for (int i = 1; i < 4; i++) {
s[i] = c[i];
}
}
});
我现在在触摸它时获取的图像将给出该位置的 rgb 值我也尝试过 onclicklistner 但不起作用,如果我自己在代码中给出 x 和 y 0 的值,那么它工作正常所有其他部分都很好我认为问题在于获取 x 和 y 的值
imageview.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int[] viewCoords = new int[2];
imageview.getLocationOnScreen(viewCoords);
int x = Math.round(event.getX());
int y = Math.round(event.getY());
int imageX = x- viewCoords[0];
int imageY = y - viewCoords[1];
ImageView image = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(imageX,imageY);
int r,g,b;
r = Color.red(pixel);
g = Color.green(pixel);
b = Color.blue(pixel);
i_r.setText(String.valueOf(r));
i_g.setText(String.valueOf(g));
i_b.setText(String.valueOf(b));
if(s[1] == r && s[2] == g && s[3] == b){
Toast.makeText(getApplicationContext(),"Match Found",Toast.LENGTH_SHORT).show();}
else{
Toast.makeText(getApplicationContext(),"Match Not Found",Toast.LENGTH_SHORT).show();}
return true;
}
});
按钮打开相机
Button opencam = this.findViewById(R.id.opencam);
opencam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);
}
}
});
}
从相机中获取图像
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK)
{
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap)extras.get("data");
imageview.setImageBitmap(imageBitmap);
}
}
}
解决方案
推荐阅读
- git - 即使在冲突解决后如何查看三向 git diff
- javascript - 检测运行了哪个 npm 脚本命令
- c# - 使用依赖注入的 Mapster 全局配置
- javascript - 如何在打开警报框时关闭 jquery 对话框
- moodle - DisabledIF - MFORM 字段
- android - 具有固定屏幕方向的 CameraX 图像旋转
- python - 函数式编程中以 10 为底的 int() 的无效文字
- android - 如何在 android 中创建概述的 EditText?
- android - ViewModel 没有分离观察者并导致空指针异常
- flutter - Flutter:尝试两次收听广播流时出现异常