Come faccio a disegnare un cerchio pieno su un oggetto grafico in esadecimale colore?

Ho bisogno di disegnare un cerchio su una bitmap in un colore specifico, dato in Hex. I “Pennelli” di classe dà solo determinati colori con i nomi.

Bitmap bitmap = new Bitmap(20, 20);
Graphics g = Graphics.FromImage(bitmap);
g.FillEllipse(Brushes.AliceBlue, 0, 0, 19, 19); //The input parameter is not a Hex
//g.FillEllipse(new Brush("#ff00ffff"), 0, 0, 19, 19); <<This is the kind of think I need.

C’è un modo di fare questo?

L’esatto problema:
Io sono la generazione di file KML (Google earth) e io sono la generazione di un sacco di linee di diversi colori Hex. I colori sono generate matematicamente e ho bisogno di tenerlo in quel modo così posso fare tutti i colori che voglio io. Ho bisogno di generare un icona PNG per ciascuna delle linee che è lo stesso colore esatto.

Presumo che questo codice è solo un esempio, ma se è in qualche modo simile al tuo codice di produzione, allora si dovrebbe sapere che non è una perdita di risorse. Hai bisogno di smaltire la Graphics e Bitmap oggetti.

OriginaleL’autore George Powell | 2010-04-04

3 risposte

  1. 12

    ColorTranslator.FromHtml vi darà il corrispondente Sistema.Di disegno.Colore:

    using (Bitmap bitmap = new Bitmap(20, 20))
    {
       using (Graphics g = Graphics.FromImage(bitmap))
       {
          using (Brush b = new SolidBrush(ColorTranslator.FromHtml("#ff00ffff")))
          {
             g.FillEllipse(b, 0, 0, 19, 19);
          }
       }
    }
    Inoltre, ricordarsi di eliminare qualsiasi di risorse grafiche.

    OriginaleL’autore TobiasBohnen

  2. 2

    Utilizzare un SolidBrush costruito con i giusti Colore.

    Esempio:

    Color color = Color.FromArgb(0x00,0xff,0xff,0x00); //Channels: Alpha, Red, Green, Blue.
    SolidBrush brush = new SolidBrush(color);
    //Use this brush in your calls to FillElipse.

    OriginaleL’autore driis

  3. 0

    Si può avere manualmente analizzare la stringa di colore.

    string colorSpec = "#ff00ffff";
    byte alpha = byte.Parse(colorSpec.Substring(1,2), System.Globalization.NumberStyles.HexNumber);
    byte red = byte.Parse(colorSpec.Substring(3, 2),System.Globalization.NumberStyles.HexNumber);
    byte green = byte.Parse(colorSpec.Substring(5, 2), System.Globalization.NumberStyles.HexNumber);
    byte blue = byte.Parse(colorSpec.Substring(7, 2), System.Globalization.NumberStyles.HexNumber);
    Color fillColor = Color.FromArgb(alpha, red, green, blue);

    Come Aaronaught punti, se la tua ARGB è in ordine, c’è un sovraccarico per FromARGB che accetta tutti i componenti in un unico intero:

    int argb = int.Parse(colorSpec.Substring(1), System.Globalization.NumberStyles.HexNumber);
    Color fillColor = Color.FromArgb(argb);
    Color.FromArgb ha un overload che accetta un int, quindi non c’è bisogno di analizzare i singoli byte; una int.Parse sarà sufficiente.

    OriginaleL’autore BlueMonkMN

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *