颜色的秘密:
颜色Color是一个调色板,
所有颜色都是由透明度Alpha,红Red,绿Green,蓝Blue按不同比例调色混合而成,如果不考虑透明度Alpha,颜色共有256*256*256=16777216种
Color=ARGB
A,R,G,B都为byte型[8位],因此可以用整体的32个整数[Int32]来表示一种颜色
Color
所属命名空间System.Drawing,是一种结构struct
//// 摘要:// 表示一种 ARGB 颜色(alpha、红色、绿色、蓝色)。[DebuggerDisplay("{NameAndARGBValue}")][Editor("System.Drawing.Design.ColorEditor, System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))][TypeConverter(typeof(ColorConverter))]public struct Color
颜色Color的四个关键属性ARGB
Alpha:代表透明度,有效值为 0 到 255.如果不指定,默认为255(完全不透明),0为透明,128为半透明
Red:红色组件值。 有效值为 0 到 255
Green:绿色组件值。 有效值为 0 到 255。
Blue:蓝色组件值。 有效值为 0 到 255
所有颜色都是有红Red,绿Green,蓝Blue调色混合而成
重载方法FromArgb()如下:
//// 摘要:// 基于指定的 8 位颜色值(红色、绿色和蓝色)创建 System.Drawing.Color 结构。 隐式的 alpha 值为 255(完全不透明)。 尽管此方法允许为每个颜色组件传递// 32 位值,但每个组件的值仅限于 8 位。//// 参数:// red:// 新 System.Drawing.Color 的红色组件值。 有效值为 0 到 255。//// green:// 新 System.Drawing.Color 的绿色组件值。 有效值为 0 到 255。//// blue:// 新 System.Drawing.Color 的蓝色组件值。 有效值为 0 到 255。//// 返回结果:// 此方法创建的 System.Drawing.Color。//// 异常:// T:System.ArgumentException:// red、green 或 blue 小于 0 或大于 255。public static Color FromArgb(int red, int green, int blue);//// 摘要:// 从指定的 System.Drawing.Color 结构创建 System.Drawing.Color 结构,但要使用新指定的 alpha 值。 尽管此方法允许为// alpha 值传递 32 位值,但该值仅限于 8 位。//// 参数:// alpha:// 新 System.Drawing.Color 的 alpha 值。 有效值为 0 到 255。//// baseColor:// 从中创建新 System.Drawing.Color 的 System.Drawing.Color。//// 返回结果:// 此方法创建的 System.Drawing.Color。//// 异常:// T:System.ArgumentException:// alpha 小于 0 或大于 255。public static Color FromArgb(int alpha, Color baseColor);//// 摘要:// 基于四个 ARGB 组件(alpha、红色、绿色和蓝色)值创建 System.Drawing.Color 结构。 尽管此方法允许为每个组件传递 32 位值,但每个组件的值仅限于// 8 位。//// 参数:// alpha:// Alpha 组件。 有效值为 0 到 255。//// red:// 红色组件。 有效值为 0 到 255。//// green:// 绿色组件。 有效值为 0 到 255。//// blue:// 蓝色组件。 有效值为 0 到 255。//// 返回结果:// 此方法创建的 System.Drawing.Color。//// 异常:// T:System.ArgumentException:// alpha、red、green 或 blue 小于 0 或大于 255。public static Color FromArgb(int alpha, int red, int green, int blue);//// 摘要:// 基于一个 32 位 ARGB 值创建 System.Drawing.Color 结构。//// 参数:// argb:// 用于指定 32 位 ARGB 值的值。//// 返回结果:// 此方法创建的 System.Drawing.Color 结构。public static Color FromArgb(int argb);
我们这里展示已知的系统颜色枚举KnownColor,并显示对应RGBA.html" title=RGBA>RGBA值.
新建窗体应用程序ColorDemo,将默认的Form1重命名为FormColor.
窗体FormColor设计器如下:
窗体设计器相关代码如下:
文件 FormColor.Designer.cs
namespace ColorDemo
{partial class FormColor{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗体设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要修改/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.dgvColor = new System.Windows.Forms.DataGridView();this.btnColor = new System.Windows.Forms.Button();this.dgvcKnowColor = new System.Windows.Forms.DataGridViewTextBoxColumn();this.dgvcRed = new System.Windows.Forms.DataGridViewTextBoxColumn();this.dgvcGreen = new System.Windows.Forms.DataGridViewTextBoxColumn();this.dgvcBlue = new System.Windows.Forms.DataGridViewTextBoxColumn();this.dgvcAlpha = new System.Windows.Forms.DataGridViewTextBoxColumn();((System.ComponentModel.ISupportInitialize)(this.dgvColor)).BeginInit();this.SuspendLayout();// // dgvColor// this.dgvColor.AllowUserToAddRows = false;this.dgvColor.AllowUserToDeleteRows = false;this.dgvColor.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;this.dgvColor.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {this.dgvcKnowColor,this.dgvcRed,this.dgvcGreen,this.dgvcBlue,this.dgvcAlpha});this.dgvColor.Location = new System.Drawing.Point(12, 85);this.dgvColor.MultiSelect = false;this.dgvColor.Name = "dgvColor";this.dgvColor.ReadOnly = true;this.dgvColor.RowTemplate.Height = 23;this.dgvColor.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;this.dgvColor.Size = new System.Drawing.Size(776, 426);this.dgvColor.TabIndex = 0;this.dgvColor.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvColor_CellContentClick);this.dgvColor.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvColor_CellContentClick);this.dgvColor.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvColor_CellContentClick);// // btnColor// this.btnColor.Font = new System.Drawing.Font("宋体", 13F);this.btnColor.Location = new System.Drawing.Point(45, 12);this.btnColor.Name = "btnColor";this.btnColor.Size = new System.Drawing.Size(452, 50);this.btnColor.TabIndex = 2;this.btnColor.Text = "Color";this.btnColor.UseVisualStyleBackColor = true;// // dgvcKnowColor// this.dgvcKnowColor.HeaderText = "已知的系统颜色";this.dgvcKnowColor.Name = "dgvcKnowColor";this.dgvcKnowColor.ReadOnly = true;this.dgvcKnowColor.Width = 180;// // dgvcRed// this.dgvcRed.HeaderText = "红色(Red)";this.dgvcRed.Name = "dgvcRed";this.dgvcRed.ReadOnly = true;this.dgvcRed.Width = 120;// // dgvcGreen// this.dgvcGreen.HeaderText = "绿色(Green)";this.dgvcGreen.Name = "dgvcGreen";this.dgvcGreen.ReadOnly = true;this.dgvcGreen.Width = 120;// // dgvcBlue// this.dgvcBlue.HeaderText = "蓝色(Blue)";this.dgvcBlue.Name = "dgvcBlue";this.dgvcBlue.ReadOnly = true;this.dgvcBlue.Width = 120;// // dgvcAlpha// this.dgvcAlpha.HeaderText = "透明度(Alpha)";this.dgvcAlpha.Name = "dgvcAlpha";this.dgvcAlpha.ReadOnly = true;this.dgvcAlpha.Width = 120;// // FormColor// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(800, 523);this.Controls.Add(this.btnColor);this.Controls.Add(this.dgvColor);this.Name = "FormColor";this.Text = "颜色的秘密ARGB【Alpha,Red,Green,Blue】";this.Load += new System.EventHandler(this.FormColor_Load);((System.ComponentModel.ISupportInitialize)(this.dgvColor)).EndInit();this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.DataGridView dgvColor;private System.Windows.Forms.Button btnColor;private System.Windows.Forms.DataGridViewTextBoxColumn dgvcKnowColor;private System.Windows.Forms.DataGridViewTextBoxColumn dgvcRed;private System.Windows.Forms.DataGridViewTextBoxColumn dgvcGreen;private System.Windows.Forms.DataGridViewTextBoxColumn dgvcBlue;private System.Windows.Forms.DataGridViewTextBoxColumn dgvcAlpha;}
}
窗体相关程序代码如下:
文件FormColor.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace ColorDemo
{public partial class FormColor : Form{public FormColor(){InitializeComponent();dgvColor.AutoGenerateColumns = false;dgvcKnowColor.DataPropertyName = "KnowColorName";dgvcRed.DataPropertyName = "Red";dgvcGreen.DataPropertyName = "Green";dgvcBlue.DataPropertyName = "Blue";dgvcAlpha.DataPropertyName = "Alpha";}private void FormColor_Load(object sender, EventArgs e){DataTable dt = new DataTable("ColorTable");dt.Columns.Add("KnowColorName", typeof(string));dt.Columns.Add("Red", typeof(int));dt.Columns.Add("Green", typeof(int));dt.Columns.Add("Blue", typeof(int));dt.Columns.Add("Alpha", typeof(int));string[] knownColorArray = Enum.GetNames(typeof(KnownColor));for (int i = 0; i < knownColorArray.Length; i++){KnownColor knownColor;Enum.TryParse(knownColorArray[i], true, out knownColor);Color color = Color.FromKnownColor(knownColor);dt.Rows.Add(color.Name, color.R, color.G, color.B, color.A);}dgvColor.DataSource = dt;}private void RefreshButtonColor(Color color) {if (!IsHandleCreated) {return;}this.Invoke(new Action(() => {btnColor.BackColor = color;btnColor.Text = $"{color.Name}(R:{color.R},G:{color.G},B:{color.B})";}));}private void dgvColor_CellContentClick(object sender, DataGridViewCellEventArgs e){if (e.ColumnIndex < 0 || e.RowIndex < 0) {return;}KnownColor knownColor;Enum.TryParse(Convert.ToString(dgvColor["dgvcKnowColor", e.RowIndex].Value), true, out knownColor);Color color = Color.FromKnownColor(knownColor);RefreshButtonColor(color);}}
}
颜色运行如图: