>  기사  >  웹 프론트엔드  >  노드 곡선을 사용하면 Photoshop과 유사하게 마우스로 노드를 드래그하여 곡선을 조정할 수 있습니다.

노드 곡선을 사용하면 Photoshop과 유사하게 마우스로 노드를 드래그하여 곡선을 조정할 수 있습니다.

高洛峰
高洛峰원래의
2017-02-20 09:50:013235검색

Photoshop에서 가장 일반적으로 사용되는 기능 중 하나는 그림과 같이 곡선 조정입니다.

노드 곡선을 사용하면 Photoshop과 유사하게 마우스로 노드를 드래그하여 곡선을 조정할 수 있습니다.

마우스로 곡선 노드를 추가, 삭제, 드래그하여 이미지를 조정합니다. 매개변수. 아이디어 측면에서(여기에서는 곡선 자체만 고려되며 데이터 저장은 이 목록에 포함되지 않음) 이 함수는 비교적 간단합니다.

  1. 곡선은 다음과 같은 집합으로 표현됩니다. 포인트 노드

  2. 마우스로 노드를 마우스로 이동하면 실제로 단일 포인트가 수정됩니다.

  3. 포인트 삽입 및 삭제

  4. 노드는 핸들, 작은 정사각형일 뿐입니다

  5. Paint DrawCurve에서 모든 노드를 통과하는 곡선을 그립니다.

  6. Draw 현재 노드를 나타내는 십자선

  7. 마우스를 누르면 기존 노드에 있는지 확인하고, 그렇지 않으면 새 노드를 추가합니다.

  8. 마우스를 누르고 이동, 노드가 있으면 노드 좌표는 마우스 좌표

  9. 그림 새로고침

완성된 프로그램 동작 시연(애니메이션):

노드 곡선을 사용하면 Photoshop과 유사하게 마우스로 노드를 드래그하여 곡선을 조정할 수 있습니다.

다음은 샘플 코드의 일부입니다.

노드:


 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 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.