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

bitmap 색상 변환 코드에서 색 섞임 현상

0 추천
이미지뷰를 비트맵으로 변환하여 색상을 바꾸려고 코드를 찾아 가져와서 수정했는데요..

이런식으로 만들었습니다.

 

private Bitmap colorMaxChange(Bitmap bitmap){

    int w = bitmap.getWidth(); //가로 길이
    int h = bitmap.getHeight(); //세로 길이
    int size = w * h; //총 크기를 구한다.
    int [] pixels = new int[size]; // 크기만큼 픽셀 배열을 설정
    bitmap.getPixels(pixels, 0, w, 0, 0, w, h); // 해당 Bitmap의 픽셀
    for(int i = 0 ; i < size ; i++){ // 픽셀 수 만큼 반복
        int color = pixels[i]; // 해당 픽셀의 컬러값
        int r = (color >> 16) & 0xFF; // red에 해당하는 정보
        int g = (color >> 8) & 0xFF; // green에 해당하는 정보
        int b = (color) & 0xFF; // blue 에 해당하는 정보

        r *= 255; // 색을 조정한다.
        g *= 255;
        b *= 255;

        int y = (r + g + b) >> 100; //휘도
        int c = pixels[i];

        pixels[i] = y | (y << 8) | (y << 16) | (c & 0xFFe16b0c); //해당 픽셀에 값을 저장
    }
    // 픽셀 데이터를 이용하여 Bitmap에 설정
    bitmap.setPixels(pixels, 0, w, 0, 0, w, h);
    return  bitmap;
}

 

색깔이 바뀌긴하는데 기존 이미지색이랑 겹쳐져서 색깔이 혼합되버리더군요;;;

실험으로 흰색 이미지로 하니 정상적으로 색깔이나왔습니다..

수치조절 다해봤는데,,, 알파값 준것도아닌데 색깔이 왜겹치는지 ㅠㅠㅠ

해당 코드가 잘못된건지 알려주세요..
R0R0 (2,610 포인트) 님이 2016년 12월 8일 질문
R0R0님이 2016년 12월 8일 수정

2개의 답변

0 추천
 
채택된 답변

안녕하세요 

파라메터로 전달받은 bitmap으로 setPixels() 하시면 색깔이 겹쳐집니다.

Bitmap 객체를 하나 더 만드셔서 변경할 색으로 bitmap.setPixels() 하시면 될 것 같습니다.

수고하세요!

히로시 (10,800 포인트) 님이 2016년 12월 8일 답변
R0R0님이 2016년 12월 9일 채택됨
0 추천

휘도 계산 공식이  어떻게 되는지는 모르겠으나 

    int y = (r + g + b) >> 100;  가 이상합니다. >> 100 이면 

2의 100승이라..  엄청 큰숫자일테니.. (r+g+b) 값이 0이 아니면,  int max를 넘어가 

엉뚱한 값이 될 듯 합니다..

 

익명사용자 님이 2016년 12월 8일 답변
휘도를 빼봤으나.. 여전히 같은현상이 일어나네요 ㅠ
...