В чем разница между PaintEventArgs.ClipRectangle и PaintEventArgs.Графика.ClipBounds

при переопределении метода OnPaint или OnPaintBackground в наследнике системы.Окна.Формы.Контроль, один аргумент - это всегда система.Окна.Формы.Объект painteventargs объекта. Частичная структура объекта:

  • объект painteventargs
    • ClipRectangle (система.Рисунок.Прямоугольник)
    • графика (система.Рисунок.Графика)
      • клип (система.Рисунок.Регион)
      • ClipBounds (система.Рисунок.RectangleF)
      • VisibleClipBounds (система.Рисунок.RectangleF)

графика.Клип представляется 1-битной картой применимых пикселей для влияния на последующие операции рисования.

MSDN: "возвращает или задает область, ограничивающую область рисования этого Графика."

графика.ClipBounds - это прямоугольник только для чтения, который кажется минимальным прямоугольником, чтобы полностью содержать область клипа.

MSDN: "получает структуру RectangleF, которая ограничивает область отсечения этой графики."

графика.VisibleClipBounds кажется более "интеллектуальным" клипом, хотя я не могу понять, как он работает.

MSDN: "получает ограничивающий прямоугольник видимой области отсечения этой графики."

ClipRectangle во всех случаях дублирует графику.ClipBounds собственность.

MSDN: "получает прямоугольник, в котором нужно рисовать."

может кто-то ответить на главный вопрос и потенциально пролить свет на то, что все различные граничные объекты для?

Edit: добавлены описания MSDN в соответствии с ответом Dan-o.

1 ответов


объект painteventargs.ClipRectangle-это прямоугольник, который на самом деле должен быть нарисован вашим событием Paint. Обычно равен размеру клиентской области элемента управления. Он будет меньше, когда только часть его будет перекрыта другим окном. Или при вызове метода Invalidate (Rectangle). Вы можете использовать его, чтобы пропустить розыгрыш дорогих объектов, которые выходят за пределы этого прямоугольника. Что довольно редко, Windows сама уже делает очень хорошую работу по обрезке того, что вы рисовать.

графика.Клип края что вы можете назначить в своем коде рисования, чтобы обрезать то, что вы рисуете сами. Это позволяет для различных видов эффектов, таких как рисование изображения, обрезанного кругом. Или действительно сложные эффекты отсечения, которые используют GraphicsPath, преобразованный в область.

графика.ClipBounds-это прямоугольник вокруг графики.Клип, это делает математику быстрее, чтобы получить оценку первого порядка, находится ли точка вне графики.Клип. Вы получите бессмысленные" бесконечные " границы клипа, если вы никогда не назначали свойство клипа (X=-4194304,Y=-4194304,Width=8388608,Height=8388608)

графика.VisibleClipBounds - это то же самое, что и графика.ClipBounds, но обрезается также окном управления. Так полезно проверить, может ли точка быть внутри края клип и видимый пользователю. Если вы никогда не назначаете свойство Clip, вы просто получите размер окна.

Так это окна, которые устанавливает объект painteventargs.ClipRectangle. Остальное устанавливается вами путем присвоения графики.Свойство клипа.