前面说了已经获取到颜色值了,现在需要比较两个颜色的差值。

两个颜色的根据RGB的差来取,有两种情况:

1.(R的平方+G的平方+B的平方)开根号,再两个颜色值相减获取差值。

2.(((R1-R2)的平方) + ((R1-R2)的平方) + ((R1-R2)的平方))开根号,即为差值

第一种情况差值比第二种情况差值小。

function TForm2.GetDoubleRGB(S1: string; S2: string): Integer; // 情况2
var
ss1, ss2: TStrings;
R1, G1, B1, R2, G2, B2, sum: Integer;
begin
ss1 := TstringList.create;
ss2 := TstringList.create;
ss1.CommaText := s1;
ss2.CommaText := s2;
R1 := ss1[0].ToInteger;
G1 := ss1[1].ToInteger;
B1 := ss1[2].ToInteger; R2 := ss2[0].ToInteger;
G2 := ss2[1].ToInteger;
B2 := ss2[2].ToInteger;
sum := sqr(R1-R2) + sqr(G1-G2) + sqr(B1-B2);
Result := Round(sqrt(sum));
end; function TForm2.GetSumRGB(S: string): Integer; // 情况1
var
ss: TStrings;
R, G, B, sum: Integer;
begin
ss := TstringList.create;
ss.CommaText := s;
R := ss[0].ToInteger;
G := ss[1].ToInteger;
B := ss[2].ToInteger;
sum := sqr(R) + sqr(G) + sqr(B);
Result := Round(sqrt(sum));
end;

在Image的OnMoseMove事件中先获取一点对比颜色值放在Edit1中,再以鼠标移动的坐标作为对比放在Edit2中。

procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Single);
var
vBitMapData: TBitmapData;
sum, cl1, cl2: Integer;
color: TAlphaColor;
begin
if (Edit1.Text <> '') and (Edit2.Text <> '') then
begin
if Image1.Bitmap.Map(TMapAccess.Write, vBitMapData) then
begin
color := vBitMapData.GetPixel(Round(X), Round(Y));
Edit2.Text := HexColorToRGB('$' +IntToHex(color, 1));
CLB2.Color := color;//颜色组件
cl1 := GetSumRGB(Edit1.Text);
cl2 := GetSumRGB(Edit2.Text);
sum := cl1 - cl2;
if sum < 0 then sum := sum * -1;
Edit3.Text := sum.ToString;
end;
end;
Image1.Bitmap.Unmap(vBitMapData);
end;

delphi 获取两个颜色差值的更多相关文章

  1. jQuery获取Radio选择的Value值||两个select之间option的互相添加操作(jquery实现)

    jQuery获取Radio选择的Value值: 1. $("input[name='radio_name'][checked]").val();  //选择被选中Radio的Val ...

  2. javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

    主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...

  3. Delphi使用两种不同方法获取系统端口信息--(装载)

    Delphi使用两种方法获取windows系统的端口,还可测试发送消息,点击获取端口信息后,可依次得到如下信息:DCB结构大小.波特率大小.XON的临界值.XOFF的临界值.字符位数.奇偶检验位.停止 ...

  4. 获取表单选中的值(利用php和js两种方式)

    php代码中获取表单中单选按钮的值: (单选按钮只能让我们选择一个,这里有一个“checked”属性,这是用来默认选取的,我们每次刷新我们的页面时就默认为这个值.) 例: <form name= ...

  5. 如何获取byte的各个bit值以及常见位操作

    项目中通过信号采集板的数据获取车上仪表盘指示灯的信息,将接收到的数据转成byte后,还要将每一个Byte的各个Bit值分离出来,这样才知道每个bit的值代表的具体信息.这里记录下如何获取byte的各个 ...

  6. Js获取后台集合List的值和下标的方法

    Js获取后台集合List的值和下标的方法 转载自:http://blog.csdn.net/XiaoKanZheShiJie/article/details/47280449 首先用的是struts2 ...

  7. 如何在asp.net中获取GridView隐藏列的值?

    在阅读本文之前,我获取gridview某行某列的值一般做法是这样的:row.Cells[3].Text.ToString().有点傻瓜呵呵 在Asp.net 2.0中增加了一个新的数据绑定控件:Gri ...

  8. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。

    js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ...

  9. Java获取指定时间的毫秒值的方法

    有以下两种方法获取指定时间的毫秒值: 1.Calendar类 先由getInstance获取Calendar对象,然后用clear方法将时间重置为(1970.1.1 00:00:00),接下来用set ...

随机推荐

  1. Marathon

    早上,挣扎到十点才起,刚好去吃过饭,来教研室,等待着中午的马拉松. 中午一直是很激动,有些紧张.一直到整个马拉松跑完,我达到了我唯一的目标,保持均匀的呼吸节奏.但我能明显感觉到,我并没有拼尽全力.我不 ...

  2. 简单实用的Windows命令(二)

    昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...

  3. google快捷键

          使用快捷键的好处不言自明,如果能过直接访问google自然有对应的帮助文档以供参考,不过为了方便起见,还是将自己觉得有用的信息收藏到自己访问无障碍的地方吧! 一:以下快捷键适用于Windo ...

  4. JavaScript笔记:数据类型

    javascript中有5种基本数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型--Object.javascript不支持任何创建自定义类型 ...

  5. SPI线协议详解

    更多的内容可以参考 https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus SPI的工作模式: CPOL.CPHA的搭配可以有四种工 ...

  6. 聊聊javascript中的面向对象

    面向对象这个东西一直晕晕乎乎的,正好这段时间没有活,可以好好整理整理了! 1.什么是对象? 其实这个说起来一切东西都是对象 2.目前我们使用对象的时候,使用的是两种设计模式杂糅起来的 分别是原型模式和 ...

  7. java并发编程_CountDownLanch(倒计数锁存器)应用场景

    使用介绍: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在 ...

  8. Python 之WEB框架

    wsgi模块实现socketPython web框架: - 自己实现socket 代表:Tornado - 基于wsgi(一种规范,统一接口) 代表: Django 自己开发web框架(基于wsgi) ...

  9. json 特殊字符 javascript 特殊字符处理(转载)

    特殊字符以前都是禁止页面输入,这样就简单不容易出错,但最近需求要求能输入特殊字符整理出java返回json时特殊字符的转义(不转义会破坏json数据格式导致页面读取数据出错) Java代码 publi ...

  10. C++ MFC获取软件运行目录 (包含软件名)

    TCHAR *path = new TCHAR[MAX_PATH];   GetModuleFileName(NULL,path,MAX_PATH); AfxMessageBox(path);