투명성을 유지하고 아주 오래된 핸드셋에서 멀리 떨어져있는 한 투명 용지는 느릴 필요가 없습니다. 일부 구현에서는 알파가 무시되는 경우가 종종 있고, 때로는 못생긴 수준으로 양자화되는 경우도 있습니다 (일부 모토로라 휴대 전화는 알파 값을 가장 가까운 2 비트 값으로 변환합니다.) Bleh.
나는 화면에 겹쳐진 하나의 투명 레이어로이 문제에 접근하고 싶습니다. int 배열을 투명한 픽셀을 그릴 화면의 크기로 유지하십시오 (int [width * height]). 각 프레임에서 Image.createRGBImage를 호출하고 해당 이미지를 화면에 그립니다.
실험으로, 먼저 알파 처리가이 배열에 상수 값을 채우고 화면에 그려서 속도가 느려지지 않도록 할 수 있습니다. 예 : 0x80FF0000은 화면에 붉은 색조를 혼합해야하며,이 알파 비즈니스가 선택한 핸드셋에서 작동 할 수 있는지, 즉 프레임 속도에 미치는 영향을 측정 할 수 있다면 쉽게 볼 수 있습니다.
다음으로이 배열에 원을 그릴 필요가 있습니다. Bresenham's circle drawing algorithm을 찾고 픽셀의 int 배열로 플롯하기 위해 다시 작업하십시오. 플롯 할 수있는 각 반경에 대해 사전 계산 된 반경/sqrt (2)를 갖는 찾아보기 테이블을 유지하고자 할 수 있습니다.
다음은 색상을 겹쳐서 겹치게하는 방법입니다. 가장 간단한 방법은 알파 값이있는 색상 값을 픽셀에 플롯하는 것입니다. 이미 그려진 서클과 색상이 혼합되지는 않지만 값이 싸고 서클이 배경과 섞일 것입니다.
다른 방법은 색상 혼합을 무시하고 알파에 간단한 병합을 수행하는 것입니다. 예 :
newColour = ((destColour & 0xFF000000) + 0x20000000) | srcColour;
/* Where source colour is of the form 0x00RRGGBB. Note: Adding 0x20 to alpha each
* time will only work for 7 overlapping circles. */
중첩 원의 색상은 기본을 지배 할 것이다, 그러나 적어도 플레이어가 제대로 모든 동그라미를 볼 수 것이다 겹치는 곳 알파는 불투명 될 것입니다.
정확한 색상 혼합을 원한다면 계산이 훨씬 더 복잡합니다. 특히 알파 값이있는 알파 값과 알파 값이 혼합 된 경우에는 각 픽셀의 색상 기여도가 각 색상. 불가능하지는 않지만 효율적으로 만드는 것은 고통입니다. 나는 더 싼 옵션을 선택하러 유혹받을 것이다.
출처
2009-08-03 09:12:44
izb
좋은 생각, 감사합니다!장치가 이러한 접근 방식을 처리 할 수 있는지 테스트하기 위해 샘플 코드를 작성하겠습니다. –