C#操作像素替换图片中的指定颜色

news2024/9/23 17:25:08

  待处理的图片,其特征是包含有限数量颜色,不同的颜色相互交叉使用,相同颜色并未完全连贯,需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作,最后还是自己动手编写简单的处理程序。
  程序的功能主要包括:1)一对一颜色替换,仅替换颜色RGB值等于指定颜色的像素;2)范围替换,替换颜色RGB值与指定颜色相距不超过指定距离的像素。
  获取图片像素和设置图片像素使用的是Bitmap类的GetPixel和SetPixel函数,计算像素与像素的距离使用的是三维坐标距离计算公式,如下图所示(参考文献1)。

在这里插入图片描述
  关键代码如下所示:

Bitmap curImage = picSrcImage.Image as Bitmap;
Color curColor;

//源颜色,待替换颜色
Color colorSource = Color.FromArgb(Convert.ToByte(nudR.Value), Convert.ToByte(nudG.Value), Convert.ToByte(nudB.Value));
//目标颜色
Color colorDest = Color.FromArgb(Convert.ToByte(nudDR.Value), Convert.ToByte(nudDG.Value), Convert.ToByte(nudDB.Value));

//一对一替换像素
for (int i = 0; i < curImage.Width; i++)
{
    for (int j = 0; j < curImage.Height; j++)
    {
        curColor = curImage.GetPixel(i, j);
        if ((curColor.R == Convert.ToByte(nudR.Value)) &&
            (curColor.G == Convert.ToByte(nudG.Value)) &&
            (curColor.B == Convert.ToByte(nudB.Value)))
        {
            curImage.SetPixel(i, j, colorDest);
        }
    }
}

//范围替换像素
for (int i = 0; i < curImage.Width; i++)
{
    for (int j = 0; j < curImage.Height; j++)
    {
        curColor = curImage.GetPixel(i, j);
        if (CalculateDistance(curColor, colorSource) <= Convert.ToDouble(nudRange.Value))
        {
            curImage.SetPixel(i, j, colorDest);
        }
    }
}

  最后是程序运行效果,导入原始图片后,将右上角的BALL字符内部的红色替换为蓝色,如下图所示。
在这里插入图片描述
在这里插入图片描述
参考文献:
[1]https://zhidao.baidu.com/question/1312602947632691539.html

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

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

相关文章

尚硅谷SQL|数据库的创建,修改与删除

DDL&#xff1a;创建和管理表 DDL所有的操作都要慎重&#xff0c;尤其是删除&#xff0c;清空等。 创建数据库--->确认字段--->创建数据表---->插入数据 创建数据库 1.创建数据库&#xff1a;推荐使用方式3 #创建数据库 #方式1,使用的是默认字符集 create databa…

24计算机考研调剂 | (研究所)北京微电子技术研究所

北京微电子技术研究所2024年考研调剂信息 调剂信息 一、招生专业 二、调剂对象 统考科目为思想政治理论、英语&#xff08;一&#xff09;、数学&#xff08;一&#xff09;&#xff1b;本科为电子科学与技术、微电子学、集成电路设计、电子信息工程、通信工程、计算机科学与…

有关Theano和PyTensor库

根据Github里面的介绍&#xff0c;PyTensor是源于Theano&#xff0c; Theano目前应该已经不再开发了&#xff0c;更新都是很多年前。 因此PyTensor在背景介绍中说 PyTensor is a fork of Aesara, which is a fork of Theano. Theano和PyTensor都是计算相关的库&#xff0c;可以…

报数游戏-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第39讲。 报数游戏&#xf…

VMware 替代专题 | 浅析 VMware 与 SmartX 超融合 I/O 路径差异及其影响

不同的超融合软件&#xff0c;其读写机制有一定的差异性&#xff0c;I/O 路径也不尽相同&#xff0c;这使得他们在 I/O 读写效率以及资源占用上都有不同的表现。有兴趣着手构建超融合基础架构的用户&#xff0c;可能会希望了解更多关于 I/O 路径的细节&#xff0c;从而在实施之…

智能商品计划系统:鞋服品牌的未来价值引擎

在数字化浪潮席卷全球的今天&#xff0c;智能商品计划系统正成为鞋服品牌转型升级的重要引擎。那么&#xff0c;什么是智能商品计划系统&#xff1f;它又能给鞋服品牌带来怎样的价值&#xff1f;本文将深入探讨这一话题&#xff0c;为鞋服品牌企业指引方向。 智能商品计划系统…

京东云开发者:DDD 学习与感悟 —— 向屎山冲锋

原文地址:https://mp.weixin.qq.com/s/Hvq1ttBopbxypatVcKcLiA 软件系统是通过软件开发来解决某一个业务领域或问题单元而产生的一个交付物。而通过软件设计可以帮助我们开发出更加健壮的软件系统。因此&#xff0c;软件设计是从业务领域到软件开发之间的桥梁。而DDD是软件设计…

使用QGIS将shp数据导入到数据库

QGIS将shp数据导入到数据库步骤&#xff1a; 1、在QGIS中查看携带地理坐标的数据&#xff0c;可以右键查看数据的属性数据源&#xff0c;可以修改数据使用的编码&#xff08;防止乱码&#xff09;&#xff0c;如下图 2、选择数据右键Export导出&#xff0c;在导出的页面可以选…

Springboot+vue的高校教师科研管理系统+数据库+报告+免费远程调试

项目介绍: Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的高校教师科研管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xf…

09 事务和连接池

文章目录 properties文件连接池service层实现类dao层实现类dao层实现类 连接池类: 创建线程池静态常量&#xff0c;用于放连接。 创建Properties静态常量&#xff0c;用于解析properties文件 静态代码块中&#xff0c;解析properties文件&#xff0c;将解析结果用于创建连接池 …

innovus中path group 的策略和应用(下)

BPG&#xff08;basic path group&#xff09;和PG&#xff08;path group&#xff09;的异同 INVS默认使用了BPG&#xff0c;但是基于SDC理论下PG&#xff08;path group&#xff09;也是天然存在&#xff0c;两者在数据库里边有各自存在的方式&#xff0c;也可以共融共生中&…

100个openharmony开源demo:1.日历

准备用开发者手机写100个开源的demo不知道能不能实现&#xff0c;日拱一卒&#xff0c;期待蜕变。 第一个demo&#xff1a;日历&#xff0c;借鉴了网上的日历算法&#xff0c;自己用arkts写了界面和点击事件&#xff0c;各位可根据此demo写自己的日历选择器等组件。 1.目录结…

【JAVA笔记】IDEA配置本地Maven

文章目录 1 配置本地Maven1.1 Maven下载1.2 Maven安装与配置1.2.1 安装1.2.2 配置1.2.2.1 环境配置1.2.2.2 本地仓库配置 2 IDEA设置本地Maven 1 配置本地Maven 1.1 Maven下载 官网&#xff1a;http://maven.apache.org/下载地址&#xff1a;http://maven.apache.org/downloa…

SinoDB客户端工具dbaccess

类似Oracle的客户端工具sqlplus&#xff0c;Mysql的客户端工具mysql&#xff0c;SinoDB数据库也有自带的命令行客户端工具dbaccess。 dbaccess 识别用户输入&#xff0c;将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行&#xff0c;然后接收服务器的执行结果&#xf…

windows上打开redis服务闪退问题处理

方法1&#xff1a;在windows上面打开redis服务时&#xff0c;弹窗闪退可能是6379端口占用&#xff0c;可以用以下命令查看&#xff1a; netstat -aon | findstr 6379 如果端口被占用可以用这个命令解决&#xff1a; taskkill /f /pid 进程号 方法2&#xff1a; 可以使用…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

数据泄露问题怎么解决?迅软DSE加密软件助您守护重要信息

企业信息泄露的危害 企业数据泄露事件不仅给企业带来了经济损失和声誉损害&#xff0c;还可能导致用户个人信息的泄露&#xff0c;引起社会广泛关注。 因此&#xff0c;企业需要采取更加严格的数据保护措施&#xff0c;使用数据加密系统以防范潜在的数据泄露风险。同时&#…

Vue.js前端开发零基础教学(三)

目录 2.6 计算属性 2.7侦听器 2.8 样式绑定 2.8.1 绑定class属性 2.8.2 绑定style属性 2.9 阶段案例——学习计划表 2.6 计算属性 概念&#xff1a;Vue提供了计算属性来描述依赖响应式数据的复杂逻辑。 计算属性可以实时监听数据的变化&#xff0c;返回一个计算…

Premiere模板|200个视频标题文字动画pr字幕模板包

Premiere模板&#xff0c;13个类别200个Pr视频标题字幕文字动画模板mogrt包。 几乎适用于任何场景。粗体标题&#xff0c;标注&#xff0c;未来主义和线条标题&#xff0c;下三分之一&#xff0c;霓虹灯&#xff0c;带数字的标题&#xff0c;倒计时&#xff0c;表格&#xff0c…

智慧商显安卓主板MT8788_联发科MTK平台多媒体广告一体机方案

MT8788高性能智能主板&#xff0c;支持Android 9.0操作系统&#xff0c;支持双屏异显功能;MT8788是基于12nm工艺制程四核A73四核A53架构的八核心CPU,主频高达2.0GHz,拥有超强的通用计算性能。 MT8788主板采用10层二阶超高密度PCB板,集成了4G、百兆以太网、2.4G/5G 双频WiFi、蓝…