GDI +: Как заполнить треугольник?

Я хочу заполнить нижнюю левую половину прямоугольника (т.е. треугольника):

alt text

с LinearGradient, переходя от цвета к прозрачному: alt text

Заполнение половины прямоугольника:

alt text

Я знаю точку (x, y) и размер прямоугольника.

Если я попробую использовать LinearGradientBrush, для выполнения моего линейного градиента:

brush = new LinearGradientBrush(
      MakePoint(0, y), //bottom left corner
      MakePoint(x, 0), //upper right corner
      MakeColor(255, c), //fully opaque color
      MakeColor(0, c)); //fully transparent color
graphics.FillRectangle(brush, MakeRect(0, 0, w, h));

Кисть линейного градиента заполняет весь прямоугольник, что было бы хорошо, если бы она продолжала заливать остальную часть прямоугольника окончательным (прозрачным) цветом; но вместо этого он оборачивается вокруг:

alt text

у меня есть мой LinearGradientBrush, как мне нравится, я просто хочу FillTriangle или FillPolygon, а не FillRectangle. За исключением того, что нет FillTriangle или FillPolygon, только FillRectangle и FillEllipse.

Смотрите также

текст ссылки


person Ian Boyd    schedule 19.01.2011    source источник
comment
Какую версию .NET вы используете? Я определенно вижу метод FillPolygon в графическом объекте. msdn.microsoft.com/en-us/library/89sks199.aspx   -  person George Johnston    schedule 19.01.2011
comment
Что вы знаете, там есть один. Я поклялся, что смогу найти только FillRectangle и FillEllipse. (msdn.microsoft.com/en-us/ library / ms535958 (v = VS.85) .aspx) Хотя я не использую .NET, это GDI +. Перефразируйте это как ответ, и я приму это.   -  person Ian Boyd    schedule 19.01.2011
comment
+1 У меня был такой же вопрос, нашел в гугле. Так что +1, мы, дебилы, должны держаться вместе!   -  person MarkJ    schedule 01.04.2011


Ответы (1)


В библиотеке Graphics есть FillPolygon. Я думаю, у вас должно получиться так:

brush = new LinearGradientBrush(
      MakePoint(x, y), 
      MakePoint(0, h), 
      MakeColor(255, c), //fully opaque color
      MakeColor(0, c)); //fully transparent color

graphics.FillPolygon(brush, new PointF[] {
        new PointF(0, 0),
        new PointF(0, h),
        new PointF(w, h)
    });
person jwatts1980    schedule 19.01.2011
comment
Несмотря на то, что я идиот, я думаю, что этот вопрос может быть полезным, поскольку FillTriangle может быть реализован как `FillPolygon). И хотя ваш синтаксис, вероятно, предназначен для .NET, его достаточно легко перевести на GDI +. - person Ian Boyd; 19.01.2011