C#中颜色的秘密

news/2025/1/16 0:00:29/

颜色的秘密:

颜色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);}}
}

颜色运行如图:

 


http://www.ppmy.cn/news/1563454.html

相关文章

Spring bean的生命周期和扩展

接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客&#xff0c;以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法&#xff0c; 如Autowired的构造方法注入依赖bean 如UserSer…

利用 NATIVE SQL 实现不区分供应商名字大小写进行模糊查询

公司有个需求 &#xff0c;当按用英文名字来进行查询时&#xff0c;可以实现不区分供应商名字大小写进行模糊查询。 例如&#xff1a;如果用户输入‘br’ 那么可以查出名字含有 ‘BR’、‘bR’、‘Br’ 、‘br’ 的供应商来。利用SAP 常规的 Open SQL 是实现不了的。 只能利用…

各种特种无人机快速发展,无人机反制技术面临挑战

随着科技的飞速发展&#xff0c;各种特种无人机在军事、民用等领域得到了广泛应用&#xff0c;其性能不断提升&#xff0c;应用场景也日益丰富。然而&#xff0c;无人机反制技术的发展确实面临一定的挑战&#xff0c;难以完全跟上无人机技术的快速发展步伐。以下是对这一问题的…

基于YOLOv8的高空无人机小目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型

目标检测系统【环境搭建过程】&#xff08;GPU版本&#xff09;-CSDN博客 摘要 本文提出了一种基于YOLOv8算法的高空无人机小目标检测系统&#xff0c;利用VisDrone数据集中的7765张图片&#xff08;6903张训练集&#xff0c;862张验证集&#xff09;进行模型训练&#xff0c;…

shell脚本(二)

1、需求&#xff1a;判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 #!/bin/bashNetwork"192.168.1"for i in {1..254}; doip"${Network}.${i}"if ping -c 1 -W 1 "$ip" > /dev/null 2>&…

认识机器学习中的结构风险最小化准则

上一篇文章我们学习了关于经验风险最小化准则&#xff0c;其核心思想是通过最小化训练数据上的损失函数来优化模型参数&#xff0c;从而提高模型在训练集上的表现。但是这也会导致一个问题&#xff0c;经验风险最小化原则很容易导致模型在训练集上错误率很低&#xff0c;但在未…

Java基于SSM框架的在线视频教育系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

安全运维管理 10.9密码管理

密码技术是保证信息保密性和完整性的重要技术&#xff0c;为保证密码技术使用过程的安全&#xff0c;在遵循相关的国家标准和行业标准基础上&#xff0c;对于涉及到的产品、设备和密码需要加强管理。 10.9.1 应遵循密码相关的国家标准和行业标准。 密码生产需要授权许可&#…