+ introducing colorspaces
This commit is contained in:
parent
c8d700cf27
commit
11cbeee069
|
@ -0,0 +1,28 @@
|
||||||
|
with Ada.Numerics.Elementary_Functions;
|
||||||
|
use Ada.Numerics.Elementary_Functions;
|
||||||
|
|
||||||
|
package body Video.Colorspaces.Float_RGB is
|
||||||
|
|
||||||
|
package body sRGB is
|
||||||
|
function To_sRGB (C_L : Float) return Float
|
||||||
|
is (if C_L <= 0.0031308 then
|
||||||
|
12.92 * C_L
|
||||||
|
else
|
||||||
|
1.055 * C_L**(1.0 / 2.4) - 0.055);
|
||||||
|
|
||||||
|
function From_sRGB (C_S : Float) return Float
|
||||||
|
is (if C_S <= 0.04045 then
|
||||||
|
(1.0 / 12.92) * C_S
|
||||||
|
else
|
||||||
|
((1.0 / 1.055) * (C_S + 0.055))**2.4);
|
||||||
|
end sRGB;
|
||||||
|
|
||||||
|
package body With_Gamma is
|
||||||
|
function From_Linear (C : Linear_Color) return Gamma_Color
|
||||||
|
is (R => C.R**Inverse_Gamma, G => C.G**Inverse_Gamma, B => C.B**Inverse_Gamma, A => C.A);
|
||||||
|
|
||||||
|
function To_Linear (C : Gamma_Color) return Linear_Color
|
||||||
|
is (R => C.R**Gamma, G => C.G**Gamma, B => C.B**Gamma, A => C.A);
|
||||||
|
end With_Gamma;
|
||||||
|
|
||||||
|
end Video.Colorspaces.Float_RGB;
|
|
@ -0,0 +1,45 @@
|
||||||
|
package Video.Colorspaces.Float_RGB with Pure is
|
||||||
|
|
||||||
|
subtype Color_Component is Float;
|
||||||
|
|
||||||
|
subtype Opacity is Color_Component;
|
||||||
|
|
||||||
|
Opaque : constant Opacity := 1.0;
|
||||||
|
Transparent : constant Opacity := 0.0;
|
||||||
|
|
||||||
|
type Color is record
|
||||||
|
R : Color_Component;
|
||||||
|
G : Color_Component;
|
||||||
|
B : Color_Component;
|
||||||
|
A : Opacity := Opaque;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
subtype Linear_Color is Color;
|
||||||
|
|
||||||
|
package sRGB is
|
||||||
|
function To_sRGB (C_L : Float) return Float;
|
||||||
|
|
||||||
|
function From_sRGB (C_S : Float) return Float;
|
||||||
|
|
||||||
|
subtype sRGB_Color is Color;
|
||||||
|
|
||||||
|
function From_Linear (C : Linear_Color) return sRGB_Color
|
||||||
|
is (R => To_sRGB (C.R), G => To_sRGB (C.G), B => To_sRGB (C.B), A => C.A);
|
||||||
|
|
||||||
|
function To_Linear (C : sRGB_Color) return Linear_Color
|
||||||
|
is (R => From_sRGB (C.R), G => From_sRGB (C.G), B => From_sRGB (C.B), A => C.A);
|
||||||
|
end sRGB;
|
||||||
|
|
||||||
|
generic
|
||||||
|
Gamma : in Float;
|
||||||
|
package With_Gamma is
|
||||||
|
Inverse_Gamma : constant Float := 1.0 / Gamma;
|
||||||
|
|
||||||
|
subtype Gamma_Color is Color;
|
||||||
|
|
||||||
|
function From_Linear (C : Linear_Color) return Gamma_Color;
|
||||||
|
|
||||||
|
function To_Linear (C : Gamma_Color) return Linear_Color;
|
||||||
|
end With_Gamma;
|
||||||
|
|
||||||
|
end Video.Colorspaces.Float_RGB;
|
|
@ -0,0 +1,2 @@
|
||||||
|
package Video.Colorspaces with Pure is
|
||||||
|
end Video.Colorspaces;
|
Loading…
Reference in New Issue