none
Como hacer difuminado en un rango de colores RRS feed

  • Pregunta

  • Buenas, estoy buscando haber como puedo hacer un difuminado en un rango de colores como se ve en las barras de la  imagen de abajo

    Gracias; no se como empezar

    domingo, 29 de abril de 2018 8:39

Respuestas

Todas las respuestas

  • Tienes que usar GDI+ (espacio de nombres System.Drawing). Dentro del OnPaint del objeto deseado creas un LinearGradientBrush, y usas esa brocha para dibujar el contenido (por ejemplo, pasándosela como argumento a e.Graphics.PaintRectangle).
    domingo, 29 de abril de 2018 9:59
  • Gracias por responder Alberto 

    puedo meter 3 colores como este ejemplo


    #bitterness{background: linear-gradient(to right,  rgba(255,255,255,1) 0%,rgba(144,153,34,1) 100%);}
            #color{background: linear-gradient(to right,  rgba(255,230,153,1) 0%,rgba(150,45,0,1) 47%,rgba(54,8,10,1) 100%);}
            #alcohol{background: linear-gradient(to right,  rgba(231,228,193,1) 0%,rgba(209,191,81,1) 100%);}

    domingo, 29 de abril de 2018 12:17
  • Deleted
    domingo, 29 de abril de 2018 14:09
  • Gracias por responder Bisagra 

    Tengo este problema cuando aplico en el paint de un componente no asigna lo colores igual que el form principal

    Imports System
    Imports System.Drawing
    Imports System.Drawing.Drawing2D
    Imports System.Windows.Forms
    
    Public Class Form1
        Inherits Form
    
        Private lgb As LinearGradientBrush
    
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '  rgba(255,230,153,1) 0%,rgba(150,45,0,1) 47%,rgba(54,8,10,1) 100%);
            Me.lgb = New LinearGradientBrush(New Rectangle(0, 0, 400, 15), Color.Black, Color.White, LinearGradientMode.Horizontal)
            Dim cb As ColorBlend = New ColorBlend
            cb.Colors = New Color() {Color.FromArgb(255, 255, 230, 153), Color.FromArgb(255, 150, 45, 0), Color.FromArgb(255, 54, 8, 10)}
            cb.Positions = New Single() {0.0!, 0.47!, 1.0!}
            Me.lgb.InterpolationColors = cb
        End Sub
    
        Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
            If (WindowState = FormWindowState.Minimized) Then
                Return
            End If
    
            e.Graphics.ScaleTransform((ClientRectangle.Width / 400.0!), (ClientRectangle.Height / 15.0!))
            e.Graphics.FillRectangle(Me.lgb, New Rectangle(0, 0, 400, 15))
             
        End Sub
        Private Sub Form1_Resize(ByVal sender As Object, ByVal e As EventArgs)
            Invalidate()
        End Sub
    
        Private Sub StepIndicator1_Paint(sender As Object, e As PaintEventArgs) Handles StepIndicator1.Paint
            If (WindowState = FormWindowState.Minimized) Then
                Return
            End If
    
            e.Graphics.ScaleTransform((ClientRectangle.Width / 400.0!), (ClientRectangle.Height / 15.0!))
            e.Graphics.FillRectangle(Me.lgb, New Rectangle(0, 0, 400, 15))
        End Sub
    End Class
    

    lunes, 30 de abril de 2018 9:12
  • Deleted
    • Marcado como respuesta Diablo_Rojo martes, 1 de mayo de 2018 10:24
    lunes, 30 de abril de 2018 12:40
  • gracias
    martes, 1 de mayo de 2018 10:24
  • Tu pregunta fue: ¿cómo uso tres colores en el gradiente? la respuesta es, asignando un objeto ColorBlend a la propiedad InterpolationCololors. 

    Tenemos un gradiente de colores de 400 por 15. Lo escalamos al tamaño del control que vamos a pintar con él

    Private Sub StepIndicator1_Paint(sender As Object, e As PaintEventArgs) Handles StepIndicator1.Paint
    	e.Graphics.ScaleTransform((StepIndicator1.ClientRectangle.Width / 400.0!), (StepIndicator1.ClientRectangle.Height / 15.0!))
    	e.Graphics.FillRectangle(Me.lgb, New Rectangle(0, 0, 400, 15))
    End Sub

    Si ese gradiente vas a aplicarlo sobre controles que tienen el mismo tamaño y ese tamaño es fijo, dale al rectángulo del gradiente el tamaño del control y luego no escales nada.

    El uso del window-state en el paint de form, se debe al Invalidate del resize, que fuerza un paint, aún cuando el formulario ya fue iconizado y su altura puesta a cero. De esta manera, evitamos la excepción que se produce al intentar escalar un rectángulo con altura 0.




    Jose R. MCP
    Code Samples

    martes, 1 de mayo de 2018 17:55
    Moderador
  • //
    using System.Drawing.Drawing2D;
    
    //
    LinearGradientBrush lgb;
    
    //
    lgb = new LinearGradientBrush(new Rectangle(0, 0, 400, 15), Color.Black, Color.White, LinearGradientMode.Horizontal);
    
    //  rgba(255,230,153,1) 0%,rgba(150,45,0,1) 47%,rgba(54,8,10,1) 100%);
    ColorBlend cb = new ColorBlend();
    cb.Colors = new Color[] { Color.FromArgb(255, 255, 230, 153), Color.FromArgb(255, 150, 45, 0), Color.FromArgb(255, 54, 8, 10) };
    cb.Positions = new float[] { 0f, 0.47f, 1f };
    
    lgb.InterpolationColors = cb;
    
    
    //---
    [Graphics].FillRectangle(lgb, new Rectangle(0, 0, 400, 15));


    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            LinearGradientBrush lgb;
    
            public Form1()
            {
                InitializeComponent();
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //  rgba(255,230,153,1) 0%,rgba(150,45,0,1) 47%,rgba(54,8,10,1) 100%);
                lgb = new LinearGradientBrush(new Rectangle(0, 0, 400, 15), Color.Black, Color.White, LinearGradientMode.Horizontal);
    
                ColorBlend cb = new ColorBlend();
                cb.Colors = new Color[] { Color.FromArgb(255, 255, 230, 153), Color.FromArgb(255, 150, 45, 0), Color.FromArgb(255, 54, 8, 10) };
                cb.Positions = new float[] { 0f, 0.47f, 1f };
    
                lgb.InterpolationColors = cb;
    
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                if (WindowState == FormWindowState.Minimized) return;
                e.Graphics.ScaleTransform(ClientRectangle.Width / 400f, ClientRectangle.Height / 15f);
                e.Graphics.FillRectangle(lgb, new Rectangle(0, 0, 400, 15));
            }
    
            private void Form1_Resize(object sender, EventArgs e)
            {
                Invalidate();
            }
        }
    }



    Jose R. MCP
    Code Samples

    martes, 1 de mayo de 2018 17:57
    Moderador