2011-12-13 4 views
3

DisplacementMapFilter을 사용하여 평면형지도에서 지구 모양의 효과를 만들었습니다. 내 문제는 일부 레이블을이지도에 동기화하려고합니다. 평평한지도에서 위치의 x/y 좌표를 가져 왔지만, 지금은 대체 된 이미지로 매핑해야합니다.오버레이를 디스플레이 위치 그래프 필터로 동기화

변위 맵을 포함하는 BitmapData를 사용하여이 작업을 수행 할 수 있으므로 Bitmap을 변경하면 변위 필터와 레이블 위치가 모두 변경됩니다. 또한 레이블은 정적이 아니며 정확도가 상당히 중요합니다. DisplacementMapFilter 기준으로 화학식있다

답변

2

:

dstPixel[x, y] = 
    srcPixel[ 
    x + ((componentX(x, y) - 128) * scaleX)/256, 
    y + ((componentY(x, y) - 128) *scaleY)/256) 
    ] 

componentX/Y 비트 맵에서 컬러 채널이있다 (이 좌표 어떤 채널을 결합 할 수있는).
필자가 이해할 수 있듯이 필터가하는 것처럼지도 레이블을 이동해야합니다. 라벨 좌표 (x, y), 샘플 소스 비트 맵을 getPixel32(x, y)으로 가져옵니다. 그렇다면 x, y에 대해 어떤 바이트를 취해야하는지 알아야합니다. 기본적으로 R, G 구성 요소 일 것입니다. 그런 다음 수식을 사용하여 위치가 변경된 레이블 좌표를 가져옵니다.
주 : getPixel32는 ARGB 형식의 uint 색상을 반환합니다. 시프트 연산자 (>>)를 사용하여 색상 구성 요소를 가져 오십시오.

uint ARGB = bitmap.getPixel32(x, y); 
int B = ARGB & 0xFF; 
int G = (ARGB >> 8) & 0xFF; 
int R = (ARGB >> 16) & 0xFF; 
+1

감사합니다. 그러나 제공된 알고리즘은 거짓말입니다. 그것은'x - ((componentX (x, ...'와'y - (componentY (x ...)가 아니라'+'. –