Photoshop에서 가장 일반적으로 사용되는 기능 중 하나는 그림과 같이 곡선 조정입니다.
마우스로 곡선 노드를 추가, 삭제, 드래그하여 이미지를 조정합니다. 매개변수. 아이디어 측면에서(여기에서는 곡선 자체만 고려되며 데이터 저장은 이 목록에 포함되지 않음) 이 함수는 비교적 간단합니다.
곡선은 다음과 같은 집합으로 표현됩니다. 포인트 노드
마우스로 노드를 마우스로 이동하면 실제로 단일 포인트가 수정됩니다.
포인트 삽입 및 삭제
노드는 핸들, 작은 정사각형일 뿐입니다
Paint DrawCurve에서 모든 노드를 통과하는 곡선을 그립니다.
Draw 현재 노드를 나타내는 십자선
마우스를 누르면 기존 노드에 있는지 확인하고, 그렇지 않으면 새 노드를 추가합니다.
마우스를 누르고 이동, 노드가 있으면 노드 좌표는 마우스 좌표
그림 새로고침
완성된 프로그램 동작 시연(애니메이션):
다음은 샘플 코드의 일부입니다.
노드:
List<point> points;</point>
노드 핸들 그리기:
Rectangle getHandle(Point p) { Rectangle rect = new Rectangle( p.X - 3, p.Y - 3, 6, 6); return rect; }
判断某点是否位于手柄区域:
bool isHandle(Point p) { foreach (Point pt in points) { if (isInside(p, getHandle(pt))) { downIndex = points.IndexOf(pt); downPoint = pt; current = pt; return true; } } return false; }
注意这个部分可以适当放大一下判断区域,这样便于鼠标操作(手柄太小,不易点击)。
핸들 그리기:
void drawHandle(Graphics g, Point p) { if (points.IndexOf(p) == downIndex) g.FillRectangle( Brushes.Black, getHandle(p)); else g.DrawRectangle( Pens.Black, getHandle(p)); }
곡선 그리기:
void drawCurve(Graphics g) { g.DrawCurve(Pens.Black, points.ToArray()); }
곡선 그리기는 그래픽 클래스의 기본 스플라인 그리기 방법을 사용합니다. 기본 장력은 0.5입니다.
교차 위치 지정 선 그리기(보조 기능):
void drawCrosshair(Graphics g, Point p) { g.DrawLine( Pens.Gray, 0, p.Y, clientRect.Width, p.Y); g.DrawLine( Pens.Gray, p.X, 0, p.X, clientRect.Height); }
마우스 드래그:
protected override void OnMouseMove(MouseEventArgs e) { mousePoint = e.Location; if (mouseDown) { if (Current != null) { Current = mousePoint; } Refresh(); } }
노드가 있는 더 많은 곡선, 마우스는 다음과 유사하게 노드를 드래그하여 곡선을 조정할 수 있습니다. 포토샵 관련 기사는 PHP 중국어 홈페이지를 주목해주세요!