Что нового

Функция сравнения двух цветов с оттенком

zabu

Новичок
Сообщения
14
Репутация
1
Что можно сделать, чтобы следующая функция работала быстрее?
Код:
#include <Color.au3>

Func Shade($Col1, $Col2, $Shade)
	If $Col1 == $Col2 Then Return True
	If $Shade==0 Then Return ($Col1==$Col2)
   $Color1 = _ColorGetRGB(Execute("0x00"&$Col1))
   $Color2 = _ColorGetRGB(Execute("0x00"&$Col2))
   If Not (IsArray($Color1) AND IsArray($Color2)) Then
	  Return False
   EndIf
   For $i=0 To 2
	  If Not($Color1[$i]-$Shade < $Color2[$i] And $Color1[$i]+$Shade > $Color2[$i]) Then Return False
   Next
   Return True
EndFunc
 
Автор
Z

zabu

Новичок
Сообщения
14
Репутация
1
Или здесь не большой выигрыш по времени

Код:
Func Shade($Col1, $Col2, $Shade)
	If $Col1 == $Col2 Then Return True
	If $Shade==0 Then Return ($Col1==$Col2)
   $Color1 = _ColorGetRGB(Execute("0x00"&$Col1))
   $Color2 = _ColorGetRGB(Execute("0x00"&$Col2))
   If Not (IsArray($Color1) AND IsArray($Color2)) Then
	  Return False
   EndIf
   For $i=0 To 2
	  If Not(Abs($Color1[$i]-$Color2[$i]) < $Shade) Then Return False
   Next
   Return True
EndFunc


Может можно как по другому сравнить два цвета?


Добавлено:
Сообщение автоматически объединено:

Вот еще быстрей брать компоненты цвета на прямую без создания массива
Код:
Func Shade($Col1, $Col2, $Shade)
	If $Col1 == $Col2 Then Return True
	If $Shade==0 Then Return ($Col1==$Col2)
   $Col1 = Execute("0x"&$Col1)
   $Col2 = Execute("0x"&$Col2)
   If Abs(_ColorGetRed($Col1)-_ColorGetRed($Col2)) < $Shade And Abs(_ColorGetGreen($Col1)-_ColorGetGreen($Col2)) < $Shade And Abs(_ColorGetBlue($Col1)-_ColorGetBlue($Col2)) < $Shade Then Return True
   Return False
EndFunc
 
Верх