c#造个轮子-取色器TakeColor(附源码)

news/2025/9/28 19:10:03/文章来源:https://www.cnblogs.com/axing/p/19117420

缘由

 看过上篇文章《OpenCvSharp基于颜色反差规避FBA面单贴标(2)》的都应该有印象这么一行代码:

// 面单颜色列表(十六进制格式)  
privatestaticreadonly List<string> LabelColors = new List<string> 
{     "#7C7C7C", "#707070", "#5E5E5E", "#8F8F8D", "#5F5F5F", "#CBCBC9","#FFFFFF","#FEFEFE","#FCFCFC" ,"#7B7B7B","#828282","#7D7D7D","#787878","#D7D7D5","#777777","#7F7F7F"  
};

   每次有不同颜色或者无法定位的面单,都需要人工补录面单的背景色HEX,那么能不能集成一个工具,自动吸取图片色号保存后,这里能立即生效呢?答案是肯定的!先看看动态效果图:

123123

  1. 点击取色,跟随鼠标实时显示背景色便于定位

  2. 快捷键Alt+C,抓取当前鼠标所在背景色存储到列表并存储到根目录colorHistory.json文件,便于其他地方读取

  3. 列表支持右键删除错误颜色(如下图)

  4. 其他地方读取抓取的颜色列表

image

 保存的json文件格式如下:

["#018DBE",
"#B1C681",
"#03231E",
"#61CB81",
"#00424A",
"#B5BD68",
"#A3D9A3",
"#F68A1E",
"#0E83BA",
"#861B2D",
"#059BBC"
]

  每次抓取都会往json存储当前最新色号,然后其他地方实时读取json即可:

//// 面单颜色列表(十六进制格式)//private static readonly List<string> LabelColors = new List<string>
//{
//    "#7C7C7C", "#707070", "#5E5E5E", "#8F8F8D", "#5F5F5F", "#CBCBC9","#FFFFFF","#FEFEFE","#FCFCFC" ,"#7B7B7B","#828282","#7D7D7D","#787878","#D7D7D5","#777777","#7F7F7F"
//};
static List<string> LabelColors = new List<string>();
privatestatic List<string> LoadColorList(){try{string historyFilePath = System.Windows.Forms.Application.StartupPath + @"\colorHistory.json";if (File.Exists(historyFilePath)){string json = File.ReadAllText(historyFilePath);var hexList = JsonSerializer.Deserialize<List<string>>(json);foreach (var hex in hexList){if (!string.IsNullOrEmpty(hex)){LabelColors.Add(hex);}}return LabelColors;}}catch (Exception ex){MessageBox.Show($"加载历史记录失败: {ex.Message}", "错误",MessageBoxButtons.OK, MessageBoxIcon.Error);}returnnull;}

  116076-20250310125032345-1793233350[1]

private List<Color> colorHistory = new List<Color>();private MagnifierForm magnifierForm; privatestring historyFilePath = "colorHistory.json";private ContextMenuStrip historyContextMenu;

  

// 初始化右键菜单privatevoidInitializeContextMenu(){historyContextMenu = new ContextMenuStrip();ToolStripMenuItem deleteItem = new ToolStripMenuItem("删除选中颜色");deleteItem.Click += DeleteItem_Click;ToolStripMenuItem clearAllItem = new ToolStripMenuItem("清空所有历史");clearAllItem.Click += ClearAllItem_Click;ToolStripMenuItem copyItem = new ToolStripMenuItem("复制颜色值");copyItem.Click += CopyItem_Click;historyContextMenu.Items.AddRange(new ToolStripItem[] {copyItem, deleteItem, clearAllItem});lstHistory.ContextMenuStrip = historyContextMenu;LoadColorHistory();// 设置ListBox为自绘模式lstHistory.DrawMode = DrawMode.OwnerDrawFixed;lstHistory.DrawItem += LstHistory_DrawItem;}

  ListBox实时显示当前吸取的背景色,重绘代码如下:

// 绘制ListBox项
privatevoidLstHistory_DrawItem(object sender, DrawItemEventArgs e){if (e.Index < 0 || e.Index >= colorHistory.Count) return;e.DrawBackground();Color color = colorHistory[e.Index];string text = $"{ColorToHex(color)} - RGB({color.R},{color.G},{color.B})";// 绘制颜色块Rectangle colorRect = new Rectangle(e.Bounds.Left + 2, e.Bounds.Top + 2, 20, e.Bounds.Height - 4);using (SolidBrush brush = new SolidBrush(color)){e.Graphics.FillRectangle(brush, colorRect);}e.Graphics.DrawRectangle(Pens.Black, colorRect);// 绘制文本Rectangle textRect = new Rectangle(e.Bounds.Left + 25, e.Bounds.Top, e.Bounds.Width - 25, e.Bounds.Height);using (SolidBrush textBrush = new SolidBrush(e.ForeColor)){e.Graphics.DrawString(text, e.Font, textBrush, textRect);}e.DrawFocusRectangle();}

  RGB和HEX 相互转换

// HEX字符串转Colorprivate Color HexToColor(string hex){try{// 移除#号hex = hex.Replace("#", "");// 处理3位HEXif (hex.Length == 3){hex = $"{hex[0]}{hex[0]}{hex[1]}{hex[1]}{hex[2]}{hex[2]}";}// 处理6位HEXif (hex.Length == 6){byte r = Convert.ToByte(hex.Substring(0, 2), 16);byte g = Convert.ToByte(hex.Substring(2, 2), 16);byte b = Convert.ToByte(hex.Substring(4, 2), 16);return Color.FromArgb(r, g, b);}return Color.Empty;}catch{return Color.Empty;}}// 颜色转HEX
privatestringColorToHex(Color color){return$"#{color.R:X2}{color.G:X2}{color.B:X2}";}

  

结束语

感谢各位耐心查阅! 如果您有更好的想法欢迎一起交流,有不懂的也可以微信公众号联系博主,作者公众号会经常发一些实用的小工具和demo源码,需要的可以去看看!另外,如果觉得本篇博文对您或者身边朋友有帮助的,麻烦点个关注!赠人玫瑰,手留余香,您的支持就是我写作最大的动力,感谢您的关注,期待和您一起探讨!再会!(公众号回复“takecolor”获取完整代码)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921016.shtml

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

相关文章

实用指南:计算机视觉:人脸关键点定位与轮廓绘制

实用指南:计算机视觉:人脸关键点定位与轮廓绘制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

网站定制开发是什么外贸营销网站建设公司

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 链表的定义 链表的分类 方向&#xff08;单向还是双向&#xff09; 头节点&#xff08;哨兵节点&#xff09;的有无 循环或不循环 8种分类 不带头单向不循环链表的实现 带头单向循环链表的实现 链表与顺序表的差异 链…

mysql 对json 数据进行查询

mysql 对json 数据进行查询数据库字段为 `car_info_list` json DEFAULT NULL COMMENT 车辆信息, SELECT id, event_car_plate->>$[0] as car_plate, car_info_list, car_info_list->$[0].carPlate as i…

快捷的赣州网站建设网站维护公司广州

暴露数据引入模块语法 规范基本语法分别暴露 (按需暴露)统一暴露 export {暴露内容1&#xff0c;暴露内容2}默认暴露 (适合只暴露一个数据) 只能暴露一次同时使用在app.js中引入 规范 每个文件都是一个模块要借助Babel和Browserify依次编译代码&#xff0c;才能在浏览器端运行…

常州微信网站建设流程商城网站内容模块有哪些

信息系统项目管理师教程 第四版【第6章-项目管理概论-思维导图】 课本里章节里所有蓝色字体的思维导图

ubuntu系统挂载硬盘

ubuntu系统挂载硬盘查看硬盘挂载信息 sudo lsblk记下目标分区的UUID,如:UUID=12345678-1234-1234-1234-123456789abcext4文件系统 UUID=12345678-1234-1234-1234-123456789abc /mnt/mydrive ext4 defaults,uid=1000,…

代码之美-代码整洁之道

一、开篇引言 京东零售从9月开始对技术风险系统性地跟踪汇报,以故障数、监控发现率、故障发现时间、故障恢复时间等多个指标进行统计和跟踪汇报,相比于之前线上小故障杖责二十、大故障发配宁古塔,有了向惩前毖后、治…

Chrome for Testing availability

https://googlechromelabs.github.io/chrome-for-testing/#stable

做网站服务器配置怎么选wordpress 新建

目录 单选题1.下列说法正确的是&#xff08;B&#xff09;2.在信息论中&#xff0c;若用对数底2为&#xff0c;则信息量的单位为&#xff08;C&#xff09;3.率失真函数的下限为&#xff08;A&#xff09;4.给定xi条件下随机事件yj所包含的不确定度和条件自信息量p(yj /xi)。&a…

RAG实践:一文掌握大模型RAG过程

一、RAG是什么? RAG(Retrieval-Augmented Generation,检索增强生成), 一种AI框架,将传统的信息检索系统(例如数据库)的优势与生成式大语言模型(LLM)的功能结合在一起。不再依赖LLM训练时的固有知识,而是在回答问…

递归算法实践--到仓合单助力京东物流提效增收

一、背景京东物流到仓业务「对商家」为了减少商家按照京东采购单分货备货过程,对齐行业直接按照流向交接,提升商家满意度;「对京东」揽收操作APP提效;到仓合单功能应运而生;二、问题一次批量采购单(一次50或者10…

开发手机网站用什么语言做电商设计有什么好的网站推荐

目录 k8s是什么 k8s不是什么 云原生 微服务 整体式架构与微服务架构 微服务的特性 微服务的优势 k8s是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快…

网站空间150m分级会员管理系统网站开发

说来惭愧&#xff0c;从事互联网开发好些年了&#xff0c;有些概念一直没有彻底搞清楚。其中之一就是,ttp client配置连接池的时候,maxConnectionsPerHost,和maxTotalConnections,在网上搜了一圈&#xff0c;发现很多都讲的含含糊糊的。 作者&#xff1a;资深开发讲技术 背景 …

计算机视觉(opencv)练习——抠图(图像裁剪与轮廓提取) - 详解

计算机视觉(opencv)练习——抠图(图像裁剪与轮廓提取) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

完整教程:上下文工程驱动智能体向 透明化推理日志

完整教程:上下文工程驱动智能体向 透明化推理日志pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

基于Mysql+SpringBoot+vue框架-在线宠物用品交易网站的设计与实现 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:@scqilin/phone-ui 手机外观组件库

深入解析:@scqilin/phone-ui 手机外观组件库pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

北京网站设计权威乐云践新站建设 app开发网站

原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55) 阅读&#xff08;12257&#xff09; | 评论&#xff08;3&#xff09; 31人收藏此文章, 我要收藏赞3摘要 Linux搭建SVN 服务器目录[-] Linux搭建SVN 服务器1 安装SVN2 使用客户端连接2.1 使用…

全景网站如何建设虚拟主机登录wordpress管理后台

本篇文章包含内容较多&#xff0c;请参照目录浏览,在每一部分结束或,有该部分可能遇到的问题0、开始本教程前请先备份电脑中的重要文件&#xff01;&#xff01;&#xff01;&#xff01;一、Ubuntu20.04 搭建更详细的内容请参照该博客&#xff1a;https://www.cnblogs.com/mas…

Tita项目与绩效一体化管理:驱动企业效能跃升的数字化引擎

在数字经济时代,企业竞争的核心已从单一业务能力转向组织整体效能的协同释放。项目管理作为企业战略落地的关键抓手,正面临从”任务执行”到”价值创造”的范式转变。Tita项目经营管理一体化平台,凭借其独特的项目与…