2011-08-17 9 views
2

GDI와 함께 처음부터 그래디언트 브러시를 구현하려고합니다. GDI + 또는 다른 그래픽 프레임 워크를 사용하고 싶지 않습니다. 임의의 방향 (임의의 각도)의 그래디언트를 원합니다. 의사에C++ 및 GDI의 스 캐치에서 다중 경사 브러시를 구현할 때의 문제

내 알고리즘 :

 For each pixel in x dirrection 
     For each pixel in the y direction 
      current position = current pixel - centre      //translate origin 
      rotate this pixel according to the given angle 
      scalingFactor =(rotated pixel + centre)/extentDistance //translate origin back 
      rgbColor = startColor + scalingFactor(endColor - startColor) 

extentDistance 사각형의 중심으로부터 전달 라인의 길이 및 기울기 지금까지 확인

좋지 각도와 동일한 경사 갖는다. 나는 이것을 그릴 수 있고 멋져 보인다. 불행히도 회전 비트 때문에 사각형 모서리의 색상이 잘못되었습니다. 결과는 90 도의 배수 인 각도에서만 완벽합니다. 문제는 배율 인수가 사각형의 전체 크기에 비례하지 않는다는 것입니다.

당신이 내 포인트를 얻었는지 확신 할 수 없다. 나의 문제를 시각화하지 않고 설명하기 란 정말로 어렵다.

누구든지 도움이되거나 도움이되는 자료로 리디렉션 할 수 있다면 고맙겠습니다.

+0

입니다. 의사 코드는 정상적으로 보입니다. 따라서 구현의 세부 사항에 문제가있을 수 있습니다. –

+0

글쎄, 지금까지 해왔 던 것을 토대로 볼 때 실제 구현에서는 문제가 있다고 생각하지 않습니다. 내 문제는 내 알고리즘이라고 생각해. 코드는 작동하지만 언급 한 문제로 인해 충분하지 않습니다. 따라서 제가 요구하는 것은 그라디언트 효과를 얻기위한 공식 또는 적어도 테스트 된 알고리즘입니다! –

답변

1

사람들이 고칠 수 있습니다. 분명히 문제는 내가 그라데이션 채우기 (직사각형이 아님)를 회전 할 때 스케일링 요소를 올바르게 계산하지 못했다는 것입니다. 그래디언트가 스케일 된 거리는 그래디언트 방향에 따라 변합니다. 할 일은 회전 후에 끝점의 끝점이 어디에서 끝나는 지 알아내는 것입니다. 그리고이를 기반으로 그래디언트의 크기를 조정해야하는 거리를 찾을 수 있습니다. 그래서 기본적으로 내 알고리즘에서 수정해야 할 것은 extentDistance입니다.

그것을 할 방법 :

• •

되어 minX

로 네 X 년대의 가장 작은 찾기 네 X 년대의 가장 큰를 찾아서 전화를 네 모서리의 좌표를 변환 maxX

• y에 대해서도 동일하게 적용하십시오. 이 두 점 (최대 및 최소) 사이의 거리 •

더 도움이 될 수있는 실제 코드를 게시 extentDistance