c# 快速修改图片颜色
public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byte outColourR, byte outColourG, byte outColourB)
{
// Specify a pixel format.
PixelFormat pxf = PixelFormat.Format24bppRgb; // Lock the bitmap's bits.
Rectangle rect = new Rectangle(, , bmp.Width, bmp.Height);
BitmapData bmpData =
bmp.LockBits(rect, ImageLockMode.ReadWrite,
pxf); // Get the address of the first line.
IntPtr ptr = bmpData.Scan0; // Declare an array to hold the bytes of the bitmap.
// int numBytes = bmp.Width * bmp.Height * 3;
int numBytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[numBytes]; // Copy the RGB values into the array.
Marshal.Copy(ptr, rgbValues, , numBytes); // Manipulate the bitmap
for (int counter = ; counter < rgbValues.Length; counter += )
{
if (rgbValues[counter] != inColourR &&
rgbValues[counter + ] != inColourG &&
rgbValues[counter + ] != inColourB)
{
rgbValues[counter] = outColourR;
rgbValues[counter + ] = outColourG;
rgbValues[counter + ] = outColourB;
}
} // Copy the RGB values back to the bitmap
Marshal.Copy(rgbValues, , ptr, numBytes); // Unlock the bits.
bmp.UnlockBits(bmpData);
}
public unsafe void ChangeColour(ref Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byte outColourR, byte outColourG, byte outColourB, int k)
{
// Specify a pixel format.
PixelFormat pxf = PixelFormat.Format24bppRgb; // Lock the bitmap's bits.
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(, , bmp.Width, bmp.Height);
BitmapData bmpData =
bmp.LockBits(rect, ImageLockMode.ReadWrite,
pxf); // Get the address of the first line.
var bp =(byte*) bmpData.Scan0.ToPointer();
for (int i = ; i != bmpData.Height; i++)
{
for (int j = ; j != bmpData.Width; j++)
{
//0.3R+0.59G+0.11B
if (bp[i * bmpData.Stride + j * ] == inColourB && bp[i * bmpData.Stride + j * + ] == inColourG && bp[i * bmpData.Stride + j * + ] == inColourR)
{
bp[i * bmpData.Stride + j * ] = outColourB;
bp[i * bmpData.Stride + j * + ] = outColourG;
bp[i * bmpData.Stride + j * + ] = outColourR;
//float value = 0.11F * bp[i * bmpData.Stride + j * 3] + 0.59F * bp[i * bmpData.Stride + j * 3 + 1] +
// 0.3F * bp[i * bmpData.Stride + j * 3 + 2];
}
}
} bmp.UnlockBits(bmpData); }
c# 快速修改图片颜色的更多相关文章
- WPF 修改图片颜色
原文:WPF 修改图片颜色 本文告诉大家如何修改图片的颜色,如去掉图片的蓝色 在 WPF 可以使用很多图片处理的方法,本文告诉大家的是一个图片处理,可以把处理的图片保存在文件. 在阅读本文,我假设大家 ...
- xml代码修改图片颜色
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http ...
- Android动态修改图片颜色的实现方式分析
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.修改色相.饱和度.亮度 参看:http://blog.csdn.NET/sjf0115/article/details/7267063 2.使 ...
- 2018-8-10-WPF-修改图片颜色
title author date CreateTime categories WPF 修改图片颜色 lindexi 2018-08-10 19:16:53 +0800 2018-07-03 15:4 ...
- CorelDRAW快速去除图片背景颜色
当我们需要从网上借助一些素材图片在CorelDRAW中运用时,往往需要去掉图片的背景颜色.本文小编分享CDR中如何快速去除图片背景颜色的方法,通过此方法可以做简单的照片抠图.合成. 1. 打开Core ...
- IOS: 使用imageIO获取和修改图片的exif信息
使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...
- 利用Photoshop修改图片以达到投稿要求
摘自:http://www.dxy.cn/bbs/thread/8602152#8602152 利用Photoshop修改图片以达到投稿要求 软件版本为Photoshop CS V8.0.1(中文版) ...
- tabbarItem字体及图片颜色设置
tabbarItem设置图片后运行往往与我们原始图片颜色有出入,这是因为在默认情况下,未选中状态图片和字体颜色为灰色,选中状态下图片和字体颜色为蓝色. UIImage 在呈现(render)时会选 ...
- Android--ColorMatrix改变图片颜色
前言 本篇博客讲解如何通过改变图片像素点RGB的值的方式,在Android中改变图片的颜色.在最后将以一个简单的Demo来作为演示. 本篇博客的主要内容: ColorMatrix 使用ColorMat ...
随机推荐
- 【锁】java 锁的技术内幕
转载自https://www.2cto.com/kf/201607/525119.html 一.基础知识 在Java并发编程里头,锁是一个非常重要的概念.就如同现实生活一样,如果房子上了锁.别人就进不 ...
- 【spring源码】spring web 启动与关闭
web.xml中有这么一段声明 <context-param> <param-name>contextConfigLocation</param-name> < ...
- Unity---动画系统学习(5)---使用MatchTarget来匹配动画
1. 介绍 做好了走.跑.转弯后,我们就需要来点更加高级的动画了. 我们使用自带动画学习笔记2中的FQVault动画,来控制人物FQ. 在动画学习笔记4的基础上添加Vault动画. 添加一个参数Vau ...
- POJ1475 Pushing Boxes 华丽丽的双重BFS
woc累死了写了两个半小时...就是BFS?我太菜了... 刚开始以为让人预先跑一遍BFS,然后一会儿取两节加起来就好了,结果发现求出来的最短路(就是这个意思)会因箱子的移动而变化....我死了QWQ ...
- MySQL 安装 linux ,window 傻瓜版
现在作为服务器操作系统的一般有三种,Windows Server,Linux,Unix,在这里我们只介绍在windows下和linux下安装mysql,Unix下安装应该和linux差不多. Wind ...
- UVALive - 2678 二分/尺取
题意:求最小的长度L满足该长度上的元素和大于等于S 最近dp做多了总有一种能用dp解决一切的错觉 二分长度解决 #include<iostream> #include<algorit ...
- Oracle 11g 记录DML错误数据
[From] https://oracle-base.com/articles/10g/dml-error-logging-10gr2 需要记录下大量DML操作中出错的具体record,看到有两种方案 ...
- win7和centos7双系统--转
转自http://blog.chinaunix.net/uid-30867756-id-5758575.html 参考:http://blog.csdn.net/hsg77/article/detai ...
- bugzilla部署问题
2018-09-25 1.部署环境 kvm虚拟机内 centos 7 系统 httpd+mariadb+bugzilla 关闭系统selinux.防火墙 setenforce 临时关闭se ...
- Scrum3.0 敏捷开发白皮书
一.什么是敏捷? 敏捷是一种以用户需求为核心.采用不断迭代的方式进行的软件开发模式.敏捷依靠自组织 的跨职能小团队,在短周期内,做出小块的东西来,通过快速.频繁的迭代,迅速的获取反 馈,进而不断的完善 ...