메인화면에서 사진촬영 버튼을 누르면 바로 휴대폰 카메라로 연결되고, 촬영된 사진에서 색상을 뽑아서 비트맵 이미지와 색상명, rgb 값을 새로운 xml 파일에 보이도록 하는 코드인데 촬영, 페이지 이동은 되는데 촬영한 사진에서 색상 이미지 비트맵, 색상명 결과값이 하나도 넘어오지 않아요 에러메시지는 없는데 어디서 잘못한건지 모르겠습니다
<MainActivity>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_camera = (Button) findViewById(R.id.btn_camera);
btn_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
}
});
}
public void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(takePictureIntent);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue onlyif the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.a82108.ic",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
//String timeStamp = DateFormat.getDateTimeInstance().format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_" ;
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
".jpg",
storageDir
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
Intent intent = new Intent(getApplicationContext(), RecognitionDetail.class);
intent.putExtra(EXTRA_MESSAGE,mCurrentPhotoPath);
startActivity(intent);
return image;
}
}
<CameraActivity>
public class CameraActivity extends AppCompatActivity {
Intent intent = getIntent();
String mCurrentPhotoPath = intent.getStringExtra(EXTRA_MESSAGE);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recognition_detail);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try{
switch (requestCode) {
case REQUEST_TAKE_PHOTO: {
if (resultCode == RESULT_OK) {
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
int mRGB = bitmap.getPixel((bitmap.getWidth() / 2), (bitmap.getHeight() / 2));
// Color Conversions
float[] mHSV = new float[3];
colorToHSV(mRGB, mHSV);
float[] mRGBArray = RGBIntToArray(mRGB);
// Setting Displays
setColorDisplay(mRGB);
setRGBText(mRGB);
//setHSVText(mHSV);
// closest color
findClosestColor(mRGBArray);
}
break;
}
}
} catch (Exception error) { error.printStackTrace();}
}
private void setColorDisplay(int mRGB) {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
Bitmap mBlock = Bitmap.createBitmap(displayMetrics.widthPixels, 250, Bitmap.Config.ARGB_8888);
mBlock.eraseColor(mRGB);
ImageView iv_detail = findViewById(R.id.iv_detail);
iv_detail.setImageBitmap(mBlock);
Intent intent = new Intent(getApplicationContext(), RecognitionDetail.class);
intent.putExtra("colorimg", mBlock);
startActivity(intent);
}
private void setRGBText(int mRGB) {
int r = (mRGB >> 16) & 0xff;
int g = (mRGB >> 8) & 0xff;
int b = mRGB & 0xff;
String mRGBString = "R " + r + "\nG " + g + "\nB " + b;
Intent intent = new Intent(getApplicationContext(), RecognitionDetail.class);
intent.putExtra("rgb",mRGBString);
startActivity(intent);
}
// Closest Color
private void findClosestColor(float[] mRGBArray) {
float distance = Float.MAX_VALUE;
int closestIndex = 0;
ColorSpace.Connector c = ColorSpace.connect(
ColorSpace.get(ColorSpace.Named.SRGB),
ColorSpace.get(ColorSpace.Named.CIE_LAB));
float[] mCIELab = c.transform(mRGBArray);
for (int i = 0; i < ColorSets.X11Colors.length; i++) {
float[] X11CIELab = c.transform(RGBIntToArray(ColorSets.X11Colors[i].ColorRGB));
float tryDistance = findCIELabDist(mCIELab, X11CIELab);
if (tryDistance < distance) {
distance = tryDistance;
closestIndex = i;
}
}
TextView tv_colorname = findViewById(R.id.tv_colorname);
tv_colorname.setText(ColorSets.X11Colors[closestIndex].ColorName);
setClosestColorRGB(ColorSets.X11Colors[closestIndex].ColorRGB);
setClosestColorDisplay(ColorSets.X11Colors[closestIndex].ColorRGB);
Intent intent = new Intent(getApplicationContext(), RecognitionDetail.class);
intent.putExtra("colorname",ColorSets.X11Colors[closestIndex].ColorName);
startActivity(intent);
}
}
<recognitiondetail>
public class RecognitionDetail extends AppCompatActivity {
ImageView iv_detail;
TextView tv_colorname,tv_coloreng, tv_colordetail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recognition_detail);
iv_detail = findViewById(R.id.iv_detail);
tv_colordetail = findViewById(R.id.tv_colordetail);
tv_coloreng = findViewById(R.id.tv_coloreng);
tv_colorname = findViewById(R.id.tv_colorname);
Intent intent = getIntent();
//String mCurrentPhotoPath = intent.getStringExtra(EXTRA_MESSAGE);
// Bitmap bm = BitmapFactory.decodeFile(mCurrentPhotoPath);
Bitmap bm = (Bitmap)intent.getParcelableExtra("colorimg");
iv_detail.setImageBitmap(bm);
String colorgrb= intent.getStringExtra("rgb");
tv_colordetail.setText(colorgrb);
String colorname= intent.getStringExtra("colorname");
tv_colorname.setText(colorname);
}
}