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

本文介绍了一个简单的C#程序,用于在图片中进行颜色替换,包括一对一替换特定RGB值的颜色和替换与指定颜色在一定范围内相邻的像素。通过Bitmap类的GetPixel和SetPixel函数操作像素,展示了如何实现在BALL字符内部将红色替换为蓝色的实际应用。
摘要由CSDN通过智能技术生成

  待处理的图片,其特征是包含有限数量颜色,不同的颜色相互交叉使用,相同颜色并未完全连贯,需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作,最后还是自己动手编写简单的处理程序。
  程序的功能主要包括: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

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值