Add HSL and make the text clickable
This commit is contained in:
1 parent
db32425f94
commit
be43b0d41e
2 files changed
+138
-11
No files matched your search
Generated
+29
-7
@@ -37,6 +37,7 @@
|
||||
this.colorpreview = new System.Windows.Forms.Panel();
|
||||
this.bindlabel = new System.Windows.Forms.Label();
|
||||
this.statuslabel = new System.Windows.Forms.Label();
|
||||
this.hsllabel = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lookingatlabel
|
||||
@@ -52,17 +53,20 @@
|
||||
//
|
||||
// rgblabel
|
||||
//
|
||||
this.rgblabel.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.rgblabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.rgblabel.ForeColor = System.Drawing.Color.White;
|
||||
this.rgblabel.Location = new System.Drawing.Point(100, 65);
|
||||
this.rgblabel.Location = new System.Drawing.Point(100, 90);
|
||||
this.rgblabel.Name = "rgblabel";
|
||||
this.rgblabel.Size = new System.Drawing.Size(150, 15);
|
||||
this.rgblabel.TabIndex = 2;
|
||||
this.rgblabel.Text = "R: n/a, G: n/a, B: n/a";
|
||||
this.rgblabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.rgblabel.Click += new System.EventHandler(this.rgblabel_Click);
|
||||
//
|
||||
// hexlabel
|
||||
//
|
||||
this.hexlabel.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.hexlabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.hexlabel.ForeColor = System.Drawing.Color.White;
|
||||
this.hexlabel.Location = new System.Drawing.Point(125, 40);
|
||||
@@ -71,24 +75,27 @@
|
||||
this.hexlabel.TabIndex = 3;
|
||||
this.hexlabel.Text = "Hex: n/a";
|
||||
this.hexlabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.hexlabel.Click += new System.EventHandler(this.hexlabel_Click);
|
||||
//
|
||||
// cmkylabel
|
||||
//
|
||||
this.cmkylabel.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.cmkylabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.cmkylabel.ForeColor = System.Drawing.Color.White;
|
||||
this.cmkylabel.Location = new System.Drawing.Point(35, 90);
|
||||
this.cmkylabel.Location = new System.Drawing.Point(35, 115);
|
||||
this.cmkylabel.Name = "cmkylabel";
|
||||
this.cmkylabel.Size = new System.Drawing.Size(280, 15);
|
||||
this.cmkylabel.TabIndex = 4;
|
||||
this.cmkylabel.Text = "CMKY: C: n/a%, M: n/a%, Y: n/a%, K: n/a%";
|
||||
this.cmkylabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.cmkylabel.Click += new System.EventHandler(this.cmkylabel_Click);
|
||||
//
|
||||
// previewlabel
|
||||
//
|
||||
this.previewlabel.AutoSize = true;
|
||||
this.previewlabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.previewlabel.ForeColor = System.Drawing.Color.White;
|
||||
this.previewlabel.Location = new System.Drawing.Point(147, 115);
|
||||
this.previewlabel.Location = new System.Drawing.Point(147, 140);
|
||||
this.previewlabel.Name = "previewlabel";
|
||||
this.previewlabel.Size = new System.Drawing.Size(56, 15);
|
||||
this.previewlabel.TabIndex = 5;
|
||||
@@ -99,7 +106,7 @@
|
||||
//
|
||||
this.colorpreview.BackColor = System.Drawing.Color.White;
|
||||
this.colorpreview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.colorpreview.Location = new System.Drawing.Point(75, 140);
|
||||
this.colorpreview.Location = new System.Drawing.Point(75, 165);
|
||||
this.colorpreview.Name = "colorpreview";
|
||||
this.colorpreview.Size = new System.Drawing.Size(200, 100);
|
||||
this.colorpreview.TabIndex = 6;
|
||||
@@ -109,7 +116,7 @@
|
||||
this.bindlabel.AutoSize = true;
|
||||
this.bindlabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.bindlabel.ForeColor = System.Drawing.Color.White;
|
||||
this.bindlabel.Location = new System.Drawing.Point(77, 250);
|
||||
this.bindlabel.Location = new System.Drawing.Point(77, 275);
|
||||
this.bindlabel.Name = "bindlabel";
|
||||
this.bindlabel.Size = new System.Drawing.Size(195, 30);
|
||||
this.bindlabel.TabIndex = 7;
|
||||
@@ -120,19 +127,33 @@
|
||||
//
|
||||
this.statuslabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.statuslabel.ForeColor = System.Drawing.Color.White;
|
||||
this.statuslabel.Location = new System.Drawing.Point(95, 290);
|
||||
this.statuslabel.Location = new System.Drawing.Point(95, 315);
|
||||
this.statuslabel.Name = "statuslabel";
|
||||
this.statuslabel.Size = new System.Drawing.Size(160, 15);
|
||||
this.statuslabel.TabIndex = 8;
|
||||
this.statuslabel.Text = "Current Status: Unlocked";
|
||||
this.statuslabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// hsllabel
|
||||
//
|
||||
this.hsllabel.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.hsllabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.hsllabel.ForeColor = System.Drawing.Color.White;
|
||||
this.hsllabel.Location = new System.Drawing.Point(100, 65);
|
||||
this.hsllabel.Name = "hsllabel";
|
||||
this.hsllabel.Size = new System.Drawing.Size(150, 15);
|
||||
this.hsllabel.TabIndex = 9;
|
||||
this.hsllabel.Text = "HSL: n/a°, n/a%, n/a%";
|
||||
this.hsllabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.hsllabel.Click += new System.EventHandler(this.hsllabel_Click);
|
||||
//
|
||||
// ColorPicker
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30)))));
|
||||
this.ClientSize = new System.Drawing.Size(334, 326);
|
||||
this.ClientSize = new System.Drawing.Size(334, 351);
|
||||
this.Controls.Add(this.hsllabel);
|
||||
this.Controls.Add(this.statuslabel);
|
||||
this.Controls.Add(this.bindlabel);
|
||||
this.Controls.Add(this.colorpreview);
|
||||
@@ -158,6 +179,7 @@
|
||||
private System.Windows.Forms.Panel colorpreview;
|
||||
private System.Windows.Forms.Label bindlabel;
|
||||
private System.Windows.Forms.Label statuslabel;
|
||||
private System.Windows.Forms.Label hsllabel;
|
||||
}
|
||||
}
|
||||
|
||||
+109
-4
@@ -15,6 +15,8 @@ namespace ColorPicker
|
||||
private IntPtr _hookID = IntPtr.Zero;
|
||||
private bool _isUnlocked = true;
|
||||
|
||||
private Color _color;
|
||||
|
||||
public ColorPicker()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -75,7 +77,6 @@ namespace ColorPicker
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateColorDisplay(Color color)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
@@ -84,6 +85,8 @@ namespace ColorPicker
|
||||
}
|
||||
else
|
||||
{
|
||||
_color = color;
|
||||
|
||||
int r = color.R;
|
||||
int g = color.G;
|
||||
int b = color.B;
|
||||
@@ -104,16 +107,118 @@ namespace ColorPicker
|
||||
c = m = y = 0;
|
||||
}
|
||||
|
||||
float rNorm = r / 255f;
|
||||
float gNorm = g / 255f;
|
||||
float bNorm = b / 255f;
|
||||
|
||||
float max = Math.Max(rNorm, Math.Max(gNorm, bNorm));
|
||||
float min = Math.Min(rNorm, Math.Min(gNorm, bNorm));
|
||||
float h, s, l = (max + min) / 2;
|
||||
|
||||
if (max == min)
|
||||
{
|
||||
h = s = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
float d = max - min;
|
||||
s = l > 0.5f ? d / (2 - max - min) : d / (max + min);
|
||||
|
||||
if (max == rNorm)
|
||||
{
|
||||
h = (gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0);
|
||||
}
|
||||
else if (max == gNorm)
|
||||
{
|
||||
h = (bNorm - rNorm) / d + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
h = (rNorm - gNorm) / d + 4;
|
||||
}
|
||||
|
||||
h /= 6;
|
||||
}
|
||||
|
||||
hexlabel.Text = $"#{r:X2}{g:X2}{b:X2}";
|
||||
rgblabel.Text = $"R: {r}, G: {g}, B: {b}";
|
||||
cmkylabel.Text = $"CMYK: C: {(c * 100):0}%, M: {(m * 100):0}%, Y: {(y * 100):0}%, K: {(k * 100):0}%";
|
||||
hsllabel.Text = $"H: {(h * 360):0}°, S: {(s * 100):0}%, L: {(l * 100):0}%";
|
||||
cmkylabel.Text = $"C: {(c * 100):0}%, M: {(m * 100):0}%, Y: {(y * 100):0}%, K: {(k * 100):0}%";
|
||||
colorpreview.BackColor = color;
|
||||
}
|
||||
}
|
||||
|
||||
private string ColorToHex(Color color)
|
||||
private void CopyToClipboard(string text)
|
||||
{
|
||||
return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
|
||||
Clipboard.SetText(text);
|
||||
}
|
||||
|
||||
private void hexlabel_Click(object sender, EventArgs e)
|
||||
{
|
||||
CopyToClipboard($"#{_color.R:X2}{_color.G:X2}{_color.B:X2}");
|
||||
}
|
||||
|
||||
private void rgblabel_Click(object sender, EventArgs e)
|
||||
{
|
||||
CopyToClipboard($"R: {_color.R}, G: {_color.G}, B: {_color.B}");
|
||||
}
|
||||
private void hsllabel_Click(object sender, EventArgs e)
|
||||
{
|
||||
float r = _color.R / 255f;
|
||||
float g = _color.G / 255f;
|
||||
float b = _color.B / 255f;
|
||||
|
||||
float max = Math.Max(r, Math.Max(g, b));
|
||||
float min = Math.Min(r, Math.Min(g, b));
|
||||
float h, s, l = (max + min) / 2;
|
||||
|
||||
if (max == min)
|
||||
{
|
||||
h = s = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
float d = max - min;
|
||||
s = l > 0.5f ? d / (2 - max - min) : d / (max + min);
|
||||
|
||||
if (max == r)
|
||||
{
|
||||
h = (g - b) / d + (g < b ? 6 : 0);
|
||||
}
|
||||
else if (max == g)
|
||||
{
|
||||
h = (b - r) / d + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
h = (r - g) / d + 4;
|
||||
}
|
||||
|
||||
h /= 6;
|
||||
}
|
||||
|
||||
CopyToClipboard($"H: {(h * 360):0}°, S: {(s * 100):0}%, L: {(l * 100):0}%");
|
||||
}
|
||||
|
||||
private void cmkylabel_Click(object sender, EventArgs e)
|
||||
{
|
||||
float c = 1 - _color.R / 255f;
|
||||
float m = 1 - _color.G / 255f;
|
||||
float y = 1 - _color.B / 255f;
|
||||
float k = Math.Min(c, Math.Min(m, y));
|
||||
|
||||
if (k < 1)
|
||||
{
|
||||
c = (c - k) / (1 - k);
|
||||
m = (m - k) / (1 - k);
|
||||
y = (y - k) / (1 - k);
|
||||
}
|
||||
else
|
||||
{
|
||||
c = m = y = 0;
|
||||
}
|
||||
|
||||
CopyToClipboard($"C: {(c * 100):0}%, M: {(m * 100):0}%, Y: {(y * 100):0}%, K: {(k * 100):0}%");
|
||||
}
|
||||
|
||||
private struct MouseHookStruct
|
||||
|
||||
Reference in new issue
Block a user