j2me 그림 색상 처리

MIDP 2.0 으로 이미지 점 입 점 출 효과 구현
원문의 출처:http://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/java/p_java_0501.jsp
번역자: clapton년 8 월 
본 고 는 이미지 의 알파 값 을 바 꾸 어 그 라 데 이 션 효 과 를 나타 내 는 방법 을 소개 하 며, 글 뒤에 예제 MIDlet 코드 가 첨부 되 어 있다.
MIDP 2.0 에서 Image 류 는 새로운 방법 이 있 습 니 다. getRGB (...) 는 image 의 알파 와 RGB 값 을 int 배열 로 변환 할 수 있 습 니 다.우 리 는 이 방법 과 얻 은 배열 로 그림 의 알파 값 을 바 꿀 수 있다.
j2me 의 int 는 4 bytes 이 며, image 의 모든 픽 셀 은 ARGB 값 으로 설명 되 며, 각 값 은 0 - 255 가 될 수 있 습 니 다.알파 값 이 0 이면 대응 하 는 픽 셀 은 투명 하고, 반대로 알파 값 이 255 이면 픽 셀 은 완전히 불투명 하 다.
int 배열 에서 픽 셀 마다 색상 을 가 져 오 면 AND '&' 연산 자 를 사용 할 수 있 습 니 다.우 리 는 먼저 픽 셀 의 색 을 얻 은 후에 우리 가 얻 고 싶 은 그 라 데 이 션 효 과 를 추가 할 수 있다.
FF = 11111111 = 2550xFFFFFFFF - Alpha = 255, Red =255 Green = 255, Blue = 255(0xFFFFFFFF & 0x00FFFFFF) = 0x00FFFFFF
위의 코드 는 int 배열 의 RGB 색상 값 을 얻 을 수 있 습 니 다. 알파 값 은 0 입 니 다.
이제 알파 값 이 0 인 RGB 색상 값 이 생 겼 습 니 다. 새로운 알파 값 을 추가 하기 만 하면 됩 니 다.
만약 우리 가 색깔 의 알파 값 을 255 로 설정 하려 면, 우 리 는 왼쪽 이동 조작 자 를 사용 해 야 한다
조작 방법: (00000000 0000000 11111111111) to (11111111 00000000 0000000 0000000) use the shift left '< <' operator. (0xFF < < < 24) = 0xFF 000000. laptonxpAThotmailDO
이런 방법 으로 우 리 는 색깔 의 알파 값 을 바 꾸 거나 커버 효 과 를 실현 할 수 있다.
이미지 의 getRGB (...) 방법 으로 그림 의 모든 픽 셀 의 ARGB 값 을 얻 고 int 배열 을 넣 습 니 다.다음 blend 방법 으로 배열 의 모든 값 (픽 셀) 의 알파 값 을 변경 합 니 다.image 의 creategBImage (...) 방법 으로 우리 가 수정 한 int 배열 에서 새로운 image 를 만 듭 니 다.다음은 getRGB 와 createRGBImage 방법 을 사용 하 는 예 입 니 다.
    public static void blend(int[] raw, int alphaValue){        int len = raw.length;                // Start loop through all the pixels in the image.        for(int i=0; i            int a = 0;            int color = (raw[i] & 0x00FFFFFF); // get the colorof the pixel.            a = alphaValue;     // set the alpha value we want to use 0-255.
            a = (a<<24);    // left shift the alpha value 24 bits.            // if color = 00000000 11111111 11111111 00000000 (0xFFFF00 = Yellow)            // and alpha= 01111111 00000000 00000000 00000000            // then c+a = 01111111 11111111 11111111 00000000            // and the pixel will be blended.            color += a;            raw[i] = color;        }    }//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
작성 자 태그: 자바 CSDN 추천 태그:. net 
 자바 로 색상 투명 값 혼합 을 실현 하 는 방법
홈 페이지:http://www.maxss.netEmail: [email protected]
 
멀티미디어 나 게임 프로그램 을 개발 할 때 는 중 첩 된 색상 을 투명 하 게 처리 하 는 방법 이 필요 합 니 다. 자바 언어 로 투명 값 을 혼 산 하 는 방법 을 소개 합 니 다. 각 픽 셀 의 RGB 값 은 일정한 비율 로 혼합 되 어 있 으 며, 이 비율 은 알파 값 에 의 해 결 정 됩 니 다. 구체 적 인 산식 은 다음 과 같 습 니 다.
알파 = 0 ~ 100 R = (R1 * (100 - 알파) + R2 * 알파) / 100 G = (G1 * (100 - 알파) + G2 * 알파) / 100 B = (B1 * (100 - 알파) + B2 * 알파) / 100 예제: RGB 1 (232, 54, 13) RGB 2 (94, 186, 233) 알파 = 30 R = (232 * 70 + 94 * 30) / 100 = 190.6 - > 190 G = (54 * 70 + 186 * 30)/ 100 = 93.6 - > 93B = (13 * 70 + 233 * 30) / 100 = 79 Alpha = 50 R = (232 * 50 + 94 * 50) / 100 = 163 G = (54 * 50 + 186 * 50) / 100 = 120 B = (13 * 50 + 233 * 50) / 100 = 123 이렇게 자바 에서 상기 계산 방법 을 함수 나 클래스 로 봉 하여 편리 한 코드 로 재 활용 할 수 있 으 며, 대응 하 는 자바 코드 는 다음 과 같다.
protected Color calculateAlphaValue(Color c1, Color c2, int alpha)
{	
if (alpha < MIN_ALPHA)	alpha = MIN_ALPHA;
else if (alpha > MAX_ALPHA)	alpha = MAX_ALPHA;		
int R = (c1.getRed() * (MAX_ALPHA - alpha) + c2.getRed() * alpha) / MAX_ALPHA;	
int G = (c1.getGreen() * (MAX_ALPHA - alpha) + c2.getGreen() * alpha) / MAX_ALPHA;	
int B = (c1.getBlue() * (MAX_ALPHA - alpha) + c2.getBlue() * alpha) / MAX_ALPHA;	
return new Color(R, G, B);
}

좋은 웹페이지 즐겨찾기