mirror of
https://github.com/moparisthebest/Simba
synced 2024-11-15 22:05:09 -05:00
Colour Finding documentation is now ``complete''.
Additions are more than welcome! Some functions probably need a better description or example.
This commit is contained in:
parent
e8cb6ee685
commit
d3d34d383a
@ -1,9 +1,6 @@
|
|||||||
.. _scriptref_colour:
|
.. _scriptref_colour:
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
Not all colour finding functions have been documented yet.
|
|
||||||
|
|
||||||
Colour Finding
|
Colour Finding
|
||||||
==============
|
==============
|
||||||
|
|
||||||
@ -12,6 +9,7 @@ Finding colours on the screen is quite simple. Simba offers methods like
|
|||||||
|
|
||||||
These methods are usually composed out of several (but not always all)
|
These methods are usually composed out of several (but not always all)
|
||||||
components:
|
components:
|
||||||
|
|
||||||
* The colour to search for.
|
* The colour to search for.
|
||||||
* An area to search in, defined by *x1*, *y1*, *x2*, *y2*.
|
* An area to search in, defined by *x1*, *y1*, *x2*, *y2*.
|
||||||
* Tolerance applied to the colour matching. With a maximum tolerance all
|
* Tolerance applied to the colour matching. With a maximum tolerance all
|
||||||
@ -49,6 +47,51 @@ SimilarColors
|
|||||||
SimilarColors returns true if the two passed colours are *similar* given the
|
SimilarColors returns true if the two passed colours are *similar* given the
|
||||||
passed tolerance.
|
passed tolerance.
|
||||||
|
|
||||||
|
GetColor
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function GetColor(x, y: Integer): Integer;
|
||||||
|
|
||||||
|
GetColor returns the color on the coordinate (*x*, *y*).
|
||||||
|
|
||||||
|
*Example: Printing the colour on coordinate (25, 25)*
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
Writeln('Colour is ' + IntToStr(GetColor(25, 25)))
|
||||||
|
|
||||||
|
GetColors
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function GetColors(const Coords : TPointArray) : TIntegerArray;
|
||||||
|
|
||||||
|
GetColor returns the color on the coordinate (x, y) defined by *Coords*.
|
||||||
|
|
||||||
|
|
||||||
|
CountColor
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function CountColor(Color, xs, ys, xe, ye: Integer): Integer;
|
||||||
|
|
||||||
|
Returns how many times *Color* occurs in the area defined by (*xs*, *ys*),
|
||||||
|
(*xe*, *ye*)
|
||||||
|
|
||||||
|
CountColorTolerance
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function CountColorTolerance(Color, xs, ys, xe, ye, Tolerance: Integer): Integer;
|
||||||
|
|
||||||
|
Returns how many times *Color* occurs (within *Tolerance*)
|
||||||
|
in the area defined by (*xs*, *ys*), (*xe*, *ye*)
|
||||||
|
|
||||||
FindColor
|
FindColor
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
@ -137,6 +180,26 @@ FindColorsSpiralTolerance
|
|||||||
|
|
||||||
Same as FindColorsTolerance, but starts searching from *x*, *y*.
|
Same as FindColorsTolerance, but starts searching from *x*, *y*.
|
||||||
|
|
||||||
|
Find areas of colours
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function FindColoredArea(var x, y: Integer; color, xs, ys, xe, ye,
|
||||||
|
MinArea: Integer): Boolean;
|
||||||
|
|
||||||
|
FindColoredArea finds an area that consists out of *Color* and has a minimal
|
||||||
|
size of *MinArea*. If you want minimal area of 5x5 pixels (25), then set MinArea
|
||||||
|
to 25.
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function FindColoredAreaTolerance(var x, y : Integer; color, xs, ys, xe,
|
||||||
|
ye, MinArea, Tolerance : Integer): Boolean;
|
||||||
|
|
||||||
|
FindColoredArea finds an area that consists out of Colours that match *Color* with
|
||||||
|
the given *Tolerance* and has a minimal size of *MinArea*.
|
||||||
|
If you want minimal area of 5x5 pixels (25), then set MinArea to 25.
|
||||||
|
|
||||||
.. _scriptref_CTS:
|
.. _scriptref_CTS:
|
||||||
|
|
||||||
@ -144,13 +207,81 @@ Colour tolerance
|
|||||||
----------------
|
----------------
|
||||||
|
|
||||||
Simba contains several algorithms for determining if two colours are equal
|
Simba contains several algorithms for determining if two colours are equal
|
||||||
given a tolerance. There are three algorithms:
|
given a tolerance. There are three algorithms, from fastest to slowest:
|
||||||
|
|
||||||
.. XXX FIXME COMPLETE ME
|
* CTS 0: Quick and dirty comparison. Matches if the differences between the
|
||||||
|
three RGB values are <= Tolerance
|
||||||
|
|
||||||
.. note::
|
* CTS 1: RGB comparison that uses the Pythagorean distance in the RGB cube
|
||||||
This is a stub and needs to be expanded.
|
to define tolerance. Matches if the distance <= Tolerance.
|
||||||
|
|
||||||
|
* CTS 2: HSL comparison. It has two modifiers that modify the
|
||||||
|
result tolerance, Hue and Saturation. The lower the modifier, the higher
|
||||||
|
tolerance required for a match. They can be set seperately and therefore
|
||||||
|
used to distinguish very specific colours. Some differ a lot in saturation, but
|
||||||
|
very little in hue. Luminance is assigned a somewhat static function, and
|
||||||
|
has no modifier.
|
||||||
|
|
||||||
|
|
||||||
|
Get and Set Colour Tolerance
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
procedure SetColorToleranceSpeed(cts: integer);
|
||||||
|
|
||||||
|
Set the current colour tolerance speed. Valid values are: 0, 1 and 2.
|
||||||
|
Somewhat improperly named compared to the other CTS functions.
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
SetColorToleranceSpeed(2);
|
||||||
|
|
||||||
|
And the proper way to get the current tolerance is to use the following
|
||||||
|
function, which returns the current colour tolerance speed:
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
function GetToleranceSpeed: Integer;
|
||||||
|
|
||||||
|
*Example: Printing the Color Tolerance*
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
Writeln(Format('Tolerance Speed = %d', [GetToleranceSpeed]))
|
||||||
|
|
||||||
|
Get And Set Colour Modifiers
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
procedure SetToleranceSpeed2Modifiers(nHue, nSat: Extended);
|
||||||
|
|
||||||
|
Set colour speed 2 modifiers.
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
// 42.0 is a very high value, but this doesn't matter as this code is
|
||||||
|
// only meant to illustrate how to use this function
|
||||||
|
SetToleranceSpeed2Modifiers(42.0, 0.4)
|
||||||
|
|
||||||
|
The following function
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
procedure GetToleranceSpeed2Modifiers(var hMod, sMod: Extended);
|
||||||
|
|
||||||
|
returns colour speed 2 modifiers.
|
||||||
|
|
||||||
|
*Example: Getting the modifiers*
|
||||||
|
|
||||||
|
.. code-block:: pascal
|
||||||
|
|
||||||
|
procedure WriteModifiers;
|
||||||
|
var
|
||||||
|
H, S: Extended;
|
||||||
|
begin
|
||||||
|
GetToleranceSpeed2Modifiers(H, S);
|
||||||
|
Writeln(format('H = %f; S = %f', [H, S]));
|
||||||
|
end;
|
||||||
|
|
||||||
* CTS 0:
|
|
||||||
* CTS 1:
|
|
||||||
* CTS 2:
|
|
||||||
|
Loading…
Reference in New Issue
Block a user