zoukankan      html  css  js  c++  java
  • delphi 获取两个颜色差值

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

    两个颜色的根据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;
    
  • 相关阅读:
    Python 最强 IDE 详细使用指南!-PyCharm
    Python中最常用的字符串方法!
    转:用 Python 一键分析你的上网行为, 看是在认真工作还是摸鱼
    python中hasattr()、getattr()、setattr()函数的使用
    下载图片到本地,保存字符串内容到本地
    根据经纬度算出两个位置之间的距离
    根据日期获取星座和生肖
    java去除字符串的html标签
    java环信服务端注册IM代码
    linux命令
  • 原文地址:https://www.cnblogs.com/studypanp/p/5003101.html
Copyright © 2011-2022 走看看