CImage 设置任意像素的RGB值

2024-06-08 16:58
文章标签 cimage rgb 像素 任意 设置

本文主要是介绍CImage 设置任意像素的RGB值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们读取了CImage图像后,如果想要快速修改CImage所有像素的RGB值,应该怎么实现呢?

方法一:调用CImage的内部函数GetPixel(),GetRValue(),SetPixel()。缺点是调用函数需要入栈出栈的操作,消耗时间过长,比如一个5000*5000像素的图片,对所有像素点进行RGB设置需要等待好久。代码如下:

CImage image;
HRESULT hr = image.Load(file_name);


int image_height = image.GetHeight();
int image_width = image.GetWidth();

int  r = 0, g = 0, b = 0;
COLORREF  color;
for (int i = 0; i < image_width; i++){
for (int j = 0; j < image_height; j++){
color = image.GetPixel(i, j);  //get pixel data from image
r = GetRValue(color);        //get R value from color
g = GetGValue(color);        //get G value from color
b = GetBValue(color);        //get B value from color
image.SetPixel(i, j, RGB(r, g, b));/*设置一帧图像的像素值用来显示*/
}
}

方法二:直接修改像素点对应的地址,效率较高,代码如下:

CImage image;
HRESULT hr = image.Load(file_name);

int image_pitch = image.GetPitch();
int image_height = image.GetHeight();
int image_width = image.GetWidth();

byte* pSourceData;
pSourceData = (byte*)image.GetBits();
int image_bpp = image.GetBPP();

int  r = 0, g = 0, b = 0, alpha = 0;
int  gray = 0;
for (int i = 0; i < image_width; i++){
for (int j = 0; j < image_height; j++){
if (image_bpp == 8){
gray = *(pSourceData + j * image_pitch + i);

//进行灰度值设置
*(pSourceData + j * image_pitch + i) = 125;
}
if (image_bpp == 24){
r = *(pSourceData + j * image_pitch + i * 3);
g = *(pSourceData + j * image_pitch + i * 3 + 1);
b = *(pSourceData + j * image_pitch + i * 3 + 2);

//进行RGB设置
*(pSourceData + j * image_pitch + i * 3) = 175;//R
*(pSourceData + j * image_pitch + i * 3 + 1) = 0;//G
*(pSourceData + j * image_pitch + i * 3 + 2) = 0;//B
}

if (image_bpp == 32){
b = *(pSourceData + j * image_pitch + i * 4);
g = *(pSourceData + j * image_pitch + i * 4 + 1);
r = *(pSourceData + j * image_pitch + i * 4 + 2);
alpha = *(pSourceData + j * image_pitch + i * 4 + 3);

//进行RGB设置
*(pSourceData + j * image_pitch + i * 4) = 0;//B
*(pSourceData + j * image_pitch + i * 4 + 1) = 0;//G
*(pSourceData + j * image_pitch + i * 4 + 2) = 175;//R
*(pSourceData + j * image_pitch + i * 4 + 3) = 0;

}
}
}

这篇关于CImage 设置任意像素的RGB值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042772

相关文章

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

如何设置windows计划任务

如何设置windows计划任务 前言:在工作过程中写了一个python脚本,用于调用jira接口查询bug单数量,想要在本地定时任务执行,每天发送到钉钉群提醒,写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已经保存到一个文件,比如 jira_reminder.py。 2. 创建批处理文件 为了方便任务计划程序运行 Python 脚本,创建一个批处理文

FastAdmin/bootstrapTable 表格中生成的按钮设置成文字

公司有个系统后台框架用的是FastAdmin,后台表格的操作栏按钮只有图标,想要设置成文字。 查资料后发现其实很简单,主需要新增“text”属性即可,如下 buttons: [{name: 'acceptcompany',title: '复核企业',text:'复核企业',classname: 'btn btn-xs btn-primary btn-dialog',icon: 'fa fa-pe

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言,问: “配置即代码和基础设施即代码一样吗?” “配置即代码是什么?怎么都是基础设施即代码?” 我们都是知道,DevOp的快速发展,让服务器管理与配置的时间大大减少,配置即代码和基础设施即代码作为DevOps的重要实践,在其中起到了关键性作用。 不少人将二者看作是一件事,配置即大代码是关于管理特定的应用程序配置设置本身,而基础设施即代码更关注的是部署支持应用程序环境所需的

设置Nginx缓存策略

详细信息 Nginx服务器的缓存策略设置方法有两种:add_header或者expires。 1. add_header 1)语法:add_header name value。 2)默认值:none。 3)使用范围:http、server、location。 配置示例如下: add_header cache-control "max-age=86400";#设置缓存时间为1天。add

设置android返回键,保存和取得最高分

1.在.h中声明一些方法 virtual void keyBackClicked();           //Android返回键 bool isHaveSaveFile(); void getHighestHistoryScore(); 在.cpp中实现这个几个方法 void WelcomeLayer::keyBackClicked(

通知中心设置一个键盘的捕捉事件

//通知中心监听键盘的frame发生改变

如何给文档设置密码?电脑文件安全加密的详细操作步骤(10种方法)

在数字化时代,电脑文件的安全和隐私至关重要。通过给电脑的文件或者文件夹设置密码和加密,可以有效保护你的重要文件不被未经授权的人员访问,特别是公司的重要岗位,一些特殊的机密文件,投标文件,资金文件等等,更应该注重文件日常使用安全性。下面将为你介绍10种电脑文件,文件夹加密的详细操作步骤,帮助你更好地保护你的电脑文件安全。 加密方式一、Windows系统内置加密(电脑自带的文件加密) 选中需要

Linux开机自动启动ORACLE设置

Redhat init简介: Linux启动时,会运行一个init程序,然后由init来启动后面的任务,包括多用户环境(inittab中设定)和网络等。运行级就是当前程序运行的功能级别,这个级别从1到6,具有不同的功能。这些级别在/etc/inittab(其他发行版这个文件位置不同)中指定,该文件就是init程序寻找的主要文件。最先运行的服务放在/etc/rc.d目录下。

在浏览器中打开预览sublime text当前所编辑文件的方法和快捷键设置

配置在Chrome,Firefox中打开 安装 SideBarEnhancements 然后通过ctrl + k, ctrl + b打开侧边栏,在侧边栏的文件中右击,找到 open width -> edit applications 然后在这里边设置firefox打开的方式。 application : 路径要修改为自己默认安装的路径。 [     {