I did create camera live now I want now the value of color (r, g, b) after get the touched pixel (x, y) I have my attempt but it show always R(0)G(0)B(0) I want know what is the problem... that is my code I used java in android studio and open CV
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import org.opencv.android.CameraActivity;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;
import java.util.Collections;
import java.util.List;
public class MainActivity extends CameraActivity {
CameraBridgeViewBase cameraBridgeViewBase;
TextView textView2, textView1;
Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getPermission();
cameraBridgeViewBase = findViewById(R.id.cameraView);
textView2 = findViewById(R.id.textView2);
textView1 = findViewById(R.id.textView);
cameraBridgeViewBase.setCvCameraViewListener(new CameraBridgeViewBase.CvCameraViewListener2() {
@Override
public void onCameraViewStarted(int width, int height) {
}
@Override
public void onCameraViewStopped() {}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
return inputFrame.rgba();
}
});
if(OpenCVLoader.initDebug()){
cameraBridgeViewBase.enableView();
}
cameraBridgeViewBase.setDrawingCacheEnabled(true);
cameraBridgeViewBase.buildDrawingCache(true);
cameraBridgeViewBase.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint({"SetTextI18n", "ClickableViewAccessibility"})
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
bitmap = cameraBridgeViewBase.getDrawingCache();
int h =bitmap.getHeight();
int x = (int) motionEvent.getX();
int y = (int) motionEvent.getY();
int pixel = bitmap.getPixel(x, y);
int r = Color.red(pixel);
int g = Color.green(pixel);
int b = Color.blue(pixel);
textView2.setText("R("+r+")"+"G("+g+")"+"B("+b+")");
textView2.setTextColor(Color.WHITE);
textView2.setBackgroundColor(Color.rgb(r,g,b));
return true;
}
});
}
@Override
protected void onResume() {
super.onResume();
cameraBridgeViewBase.enableView();
}
@Override
protected void onDestroy() {
super.onDestroy();
cameraBridgeViewBase.disableView();
}
@Override
protected void onPause() {
super.onPause();
cameraBridgeViewBase.disableView();
}
@Override
protected List<? extends CameraBridgeViewBase> getCameraViewList() {
return Collections.singletonList(cameraBridgeViewBase);
}
void getPermission(){
if(checkSelfPermission(Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.CAMERA},101);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
getPermission();
}
}
}
want know the value (r,g,b) of color after touch pixel