C#中颜色的秘密

news2025/1/15 22:06:13

颜色的秘密:

颜色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值.

新建窗体应用程序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);

        }

        #endregion

        private 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.coloradmin.cn/o/2277199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm 使用教程

一、基本配置 1. 切换Python解释器 pycharm切换解释器版本 2. pycharm虚拟环境配置 虚拟环境的目的&#xff1a;创建适用于该项目的环境&#xff0c;与系统环境隔离&#xff0c;防止污染系统环境&#xff08;包括需要的库&#xff09;虚拟环境配置存放在项目根目录下的 ven…

phpenc加密程序源码

免费扩展加密程序&#xff0c;类似于sg11加密&#xff0c;支持单个PHP&#xff08;免费&#xff09;文件以及批量PHP文件&#xff08;ZIP压缩包格式&#xff09;源码加密的保护平台&#xff0c;加密后的源码文件保持原有代码结构&#xff0c;可以跨平台运行&#xff0c;可以运行…

视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?

视频转码过程是将视频文件从一种编码格式转换为另一种格式的过程&#xff0c;这一过程在现代数字媒体中扮演着至关重要的角色。众所周知&#xff0c;视频转码不仅仅是简单的格式转换&#xff0c;它涉及多个关键参数的改变&#xff0c;例如视频编码格式、比特率、分辨率以及帧率…

LeetCode热题100(哈希篇)

题目出自Leetcode热题100&#xff1a;Leetcode热题100 文章目录 1. 两数之和思路代码CJavaPython 49. 字母异位词分组思路代码CJavaPython 128. 最长连续序列思路代码CJavaPython 总结 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找…

python学opencv|读取图像(三十一)缩放图像的三种方法

【1】引言 前序学习进程中&#xff0c;我们至少掌握了两种方法&#xff0c;可以实现对图像实现缩放。 第一种方法是调用cv2.resize()函数实现&#xff0c;相关学习链接为&#xff1a; python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python opencv 读取图…

rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库

问题说明&#xff1a; 客户反馈 &#xff0c;buildroot 系统 &#xff0c;使用qt 使用sqlite &#xff0c;有报错&#xff0c;无法使用sqlite. 测试情况说明&#xff1a; 我自己测试&#xff0c;发现&#xff0c; buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…

Windows图形界面(GUI)-QT-C/C++ - Qt图形绘制详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Qt绘图基础 QPainter概述 基本工作流程 绘图事件系统 paintEvent事件 重绘机制 文字绘制技术 基本文字绘制 ​编辑 高级文字效果 基本图形绘制 线条绘制 ​编辑 形状绘制 …

OpenArk64:Windows 系统分析与逆向工程工具详解

引言 在 Windows 系统的底层操作和逆向工程领域&#xff0c;OpenArk 是一款备受推崇的开源工具集。而 OpenArk64.exe 是 OpenArk 工具的 64 位版本&#xff0c;专门用于 64 位 Windows 系统。它提供了强大的功能&#xff0c;帮助用户深入分析系统内核、进程、文件、注册表等&a…

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…

【C++】PP5015 [NOIP2018 普及组] 标题统计

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示数据规模与约定 &#x1f4af;方法分析方法1&#xff1a;我的做法实…

从玩具到工业控制--51单片机的跨界传奇【2】

咱们在上一篇博客里面讲解了什么是单片机《单片机入门》&#xff0c;让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识&#xff0c;顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话&#xff0c;可以看看博主的C语言专栏哟&#xff…

线程池面试题目集合

最近面试中总是问到ThreadPoolExecutor类相关问题&#xff0c;在此集中整理下。 问题1.ThreadPoolExecutor的关键参数是哪些&#xff0c;任务添加过程中&#xff0c;内部线程是怎样构建的&#xff1f; a)任务到达时&#xff0c;线程池数目小于核心线程数corePoolSize&#xff0…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

基于Media+Unity的手部位姿三维位姿估计

使用mediapipe Unity 手部位姿三维位姿估计 参考文章 基于Mediapipe的姿势识别并同步到Unity人体模型中 MediapipeUnity3d实现虚拟手_unity mediapipe-CSDN博客 需求 我的需求就是快速、准确的跟踪手部位姿并实现一个三维显示。 主要思路 搭建mdeiapipe系统&#xff0c…

构建高性能网络服务:从 Socket 原理到 Netty 应用实践

1. 引言 在 Java 网络编程中&#xff0c;Socket 是实现网络通信的基础&#xff08;可以查看我的上一篇博客&#xff09;。它封装了 TCP/IP 协议栈&#xff0c;提供了底层通信的核心能力。而 Netty 是在 Socket 和 NIO 的基础上&#xff0c;进一步封装的高性能、异步事件驱动的…

Python入门10:高阶函数

一、什么是高阶函数 1.1、高阶函数的概念和作用&#xff1a; 高阶函数是指 接受函数作为参数 或者 返回函数 作为结果的函数。它在函数式编程中是一个重要概念&#xff08;函数式编程&#xff08;Functional Programming &#xff0c; FP &#xff09;是一 种编程范式&#xf…

python-leetcode-矩阵置零

73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""m, n len(matrix), len(matrix[0])row_zero …

MySQL数据库(SQL分类)

SQL分类 分类全称解释DDLData Definition Language数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;DMLData Manipulation Language数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQLData Query Languag…

计算机网络 笔记 网络层1

网络层功能概述 主要的任务是把分组从源端传输到目的端&#xff0c;为分组交换网上的不同主句提供通信服务&#xff0c;网络层的传输单位是数据报。 主要的功能&#xff1b; 1&#xff0c;路由选择&#xff1a;路由选择指网络层根据特定算法&#xff0c;为数据包从源节点到目…

MyBatis-什么是MyBatis?以及MyBatis的快速入门。

简介 什么是 MyBatis&#xff1f; 什么是MyBatis? MyBatis是一款优秀的 持久层 框架&#xff0c;用于简化JDBC的开发。&#xff08;框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用的、软件基础代码模型。在框架的基础上进行软件开发更加高效、规范、通用、…