C # GDI + - Удалить чуть выше нижней половины эллипса по методу блеска - PullRequest
2 голосов
/ 15 сентября 2009

У меня есть метод глянца, и я пытаюсь получить эффект, подобный перевернутому полумесяцу. В приведенном ниже коде я хотел бы удалить чуть выше нижней половины этого эллипса, а затем нарисовать его. Кто-нибудь знает, как я могу начать это делать?

PS. Блеск тоже получается слишком белым. Я пробовал возиться с альфой безрезультатно, кто-нибудь знает какие-нибудь хитрости, чтобы сделать глянец более тонким? Спасибо

  /// <summary>
        /// Applies gloss to clock
        /// </summary>
        /// <param name="e"></param>
        private void DrawGloss(PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            float x = ((float)_CenterX / 1.1F) / _PI;
            float y = ((float)_CenterY / 1.2F) / _PI;
            float width = ((this.ClientSize.Width / 2)) + _hourLength;
            float height = ((this.ClientSize.Height / 2)) + _hourLength;

            RectangleF glossRect = new RectangleF(
           x + (float)(width * 0.10),
           y + (float)(height * 0.07),
           (float)(width * .8),
           (float)(height * 0.4));


            LinearGradientBrush gradientBrush =
                new LinearGradientBrush(glossRect,
                Color.FromArgb((int)50, Color.Transparent),
                glossColor,
                LinearGradientMode.BackwardDiagonal);
            g.FillEllipse(gradientBrush, glossRect);


        }

1 Ответ

4 голосов
/ 15 сентября 2009

FillPie может дать вам ровно пол круга. В противном случае вам придется использовать FillClosedCurve или FillPath, чтобы получить чуть меньше половины окружности, или нарисовать полукруг на промежуточном, немного меньшем растровом изображении и скопировать его обратно в основное растровое изображение с помощью DrawImage.

Для более тонкого эффекта глянца, я думаю, вам просто нужно изменить код LinearGradientBrush на:

LinearGradientBrush gradientBrush =                
    new LinearGradientBrush(glossRect,                
    Color.Transparent,                
    Color.FromArgb((int)50, glossColor),                
    LinearGradientMode.BackwardDiagonal);

Ваш исходный градиент переходил от полностью прозрачного к полностью глянцевому цвету.

...