2 votes

C# GDI+ - Supprimez juste au-dessus de la moitié inférieure de l'ellipse sur la méthode de gloss

J'ai une méthode de gloss et j'essaye d'obtenir un effet de demi-lune inversé. Sur le code ci-dessous, je souhaite supprimer juste au-dessus de la moitié inférieure de cette ellipse puis la dessiner. Est-ce que quelqu'un sait comment je pourrais commencer à faire cela?

PS. Le gloss est également trop blanc. J'ai essayé de jouer avec l'alpha en vain, est-ce que quelqu'un connaît des astuces pour rendre le gloss plus subtil? Merci

  /// 
        /// Applique un gloss à l'horloge
        /// 
        /// 
        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);

        }

4voto

MusiGenesis Points 49273

FillPie pourrait vous donner exactement la moitié d'un cercle. Sinon, vous devriez utiliser FillClosedCurve ou FillPath pour obtenir un peu moins que la moitié d'un cercle, ou dessiner un demi-cercle sur un Bitmap intermédiaire légèrement plus petit et le copier de nouveau sur votre Bitmap principal avec DrawImage.

Pour un effet de brillance plus subtil, je pense que vous devez simplement modifier votre code LinearGradientBrush comme suit :

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

Votre dégradé original allait de complètement transparent à pleine glossColor.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X