2010-11-03 8 views

Antwort

15

Rich Newman hat eine HSLColor-Klasse erstellt, die anstelle von System.Drawing.Color verwendet werden kann.

http://richnewman.wordpress.com/hslcolor-class/

+2

Diese Klasse scheint zu arbeiten * die meiste Zeit *. Ich habe ein Problem, bei dem ich eine HSL-Farbe (210,45,72) habe, was ein Blau ist, das als rgb (90,62,83) ausgegeben wird, was ein Rot ist. Ich versuche auf seinen Blog zu kommen, aber es lädt fast nie lol. – Sinaesthetic

+3

Diese Klasse verwendet die Color.GetBrightness-Methode, sodass der Farbraum [HSB] (http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC36) und nicht HSL dargestellt wird. – ironic

+1

Dont funktioniert nicht für # bbe30a und # 320ae3. Ich habe nur zwei Werte ausprobiert und aufgegeben. – aloisdg

10

Fügen Sie folgende Zeile unten an der Namespaces in Ihrem Code-Datei "mit":

using System.Runtime.InteropServices 

und mit P/Invoke, fügen Sie die folgende Funktion:

[DllImport("shlwapi.dll")] 
public static extern int ColorHLSToRGB(int H, int L, int S); 

In jeder beliebigen Klasse in Ihrem Projekt.

Wenn Sie die Farbe in Farbton, Luminanz und Sättigung als Ganzzahlen haben, dann geben Sie diese Werte an diese Funktion, und die gewünschte RGB-Farbe wird als Ganzzahl zurückgegeben. Verwenden Sie dann ColorTranslator.FromWin32, um die zurückgegebene RGB-Farbe als Ganzzahl in die System.Drawing.Color-Struktur zu übersetzen.

Ein anderer Weg ist Color.FromArgb (Int32) Überlast-Methode zu verwenden, die Farbe, die Sie als System.Drawing.Color Struktur aus dieser ganzen Zahl erstellen möchten.

Ein anderer Weg ist eine Instanz ColorConverter Klasse zu erstellen und dann ConvertFrom Methode aufrufen, und geben die RGB-Farb ganze Zahl aus dem ColorHLSToRGB Funktion zurückgegeben, oder ConvertTo Methode mit dem gleichen ersten nennen Argument, aber in der zweiten Argumenteingabe typeof(System.Drawing.Color). Konvertieren Sie dann das zurückgegebene Objekt in System.Drawing.Color-Strukturtyp.

Das Ergebnis ist genau das, was Sie suchen und erwarten!

Sie können auch versuchen, andere Algorithmen oder Möglichkeiten, die Sie suchen, finden und lernen im Internet, wie RGB-Farbe als Ganzzahl in System.Drawing.Color Struktur konvertieren oder wie HLS-Werte als drei ganze Zahlen zu konvertieren System.Drawing.Color Struktur!

+2

Ein paar Dinge zu beachten: 'H', 'L' und' S' gehen von 0 bis 240. Denken Sie daran, dass eine Luminanz von 0 Schwarz bedeutet, und 240 bedeutet Weiß, wenn Sie also eine reine Farbe wünschen '# F00') müssen Sie' L' auf 120 setzen. Auch erwähnenswert: Wenn Sie die 'Color.FromArgb (Int32)' Überladung verwenden, wird die Farbe ein Alpha von 0 haben, was bedeutet, dass Ich werde transparent sein. 'ColorTranslator.FromWin32()' hat dieses Problem nicht. – Nolonar

Verwandte Themen