마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 비트맵 이미지, 데이터 인텐트 값 안넘어감

0 추천

메인화면에서 사진촬영 버튼을 누르면 바로 휴대폰 카메라로 연결되고, 촬영된 사진에서 색상을 뽑아서 비트맵 이미지와 색상명, 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);
    }
}
am9911 (160 포인트) 님이 2020년 10월 17일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...