17.3.2.8 自定义处理(内存处理)

2024-02-17 17:04
文章标签 自定义 内存 处理 2.8 17.3

本文主要是介绍17.3.2.8 自定义处理(内存处理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

自定义处理的算法请参看第17.3.1.6节。17.3.1.6 自定义处理-CSDN博客

【例 17.50自定义图像处理,保留图像上的单一色系或者多个色系。

       //自定义图像处理private void btnCustom_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;int avgValue;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){B = rgbvalues[pos];G = rgbvalues[pos + 1];R = rgbvalues[pos + 2];Color newColor;//根据选择情况,保留选定的色系,其它颜色处理成灰度switch (getSingleColor(R, G, B)){case "R":if( cbR.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);                        break;case "G":if( CBG.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);break;case "B":if (cbB.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);break;case "P":if (cbP.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);break;case "Y":if (cbY.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);break;case "A":if (cbA.Checked == true)newColor = Color.FromArgb(R, G, B);elsenewColor = getAverage(R, G, B);break;default:newColor = getAverage(R, G, B);break;}rgbvalues[pos] = newColor.B;rgbvalues[pos + 1] = newColor.G;rgbvalues[pos + 2] = newColor.R;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest = destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}//计算所属色系,并返回色系缩写字母private string getSingleColor(int R, int G, int B){if ((R > 128) && (R - G > 30) && (R - B > 30))return "R";if ((G > 80) && (G - R > 5) && ((G - B > 20) | (B - G) < 10))return "G";if ((B > 80) && (B - R > 50) && (B - G > 30))return "B";if ((R > 128) && (B > 128) && (R - G > 30) && (B - G > 30))return "P";if ((R > 140) && (G > 120) && (Math.Abs(G - R) < 40) && (R - B > 80) && (G - B > 80))return "Y";if ((G > 180) && (B > 180) && ((B >= G) | (G - B) < 10) && (B - R > 40) && (G - R > 40))return "A";return "N";}//计算灰度均值,返回灰度颜色private Color getAverage(int R , int G, int B ){int gray;gray = (R + G + B) / 3;Color newColor = Color.FromArgb(gray, gray, gray);return newColor;}

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看 C# 教程 目录

这篇关于17.3.2.8 自定义处理(内存处理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少