forked from IFRN-SC/robo_hardware
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCorHardware.cpp
60 lines (50 loc) · 1.42 KB
/
CorHardware.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "CorHardware.h"
int CorHardware::calculeMaximo(int vermelho, int verde, int azul){
int Maximo = 0;
if(verde >= vermelho && verde >= azul){
Maximo = verde;
}else if(vermelho >= verde && vermelho >= azul){
Maximo = vermelho;
}else if(azul >= verde && azul >= vermelho){
Maximo = azul;
}
return Maximo;
}
int CorHardware::calculeMinimo(int vermelho, int verde, int azul){
int Minimo = 0;
if(verde <= vermelho && verde <= azul){
Minimo = verde;
}else if(vermelho <= verde && vermelho <= azul){
Minimo = vermelho;
}else if(azul <= verde && azul <= vermelho){
Minimo = azul;
}
return Minimo;
}
RGB CorHardware::getRGB(){
atualizarRGB();
return rgb;
}
HSV CorHardware::getHSV(){
atualizarRGB();
float Maximo = 0;
float Minimo = 0;
HSV hsv;
int vermelho = rgb.vermelho;
int azul = rgb.azul;
int verde = rgb.verde;
Minimo = calculeMinimo(vermelho,verde,azul);
Maximo = calculeMaximo(vermelho,verde,azul);
if(Maximo == vermelho && verde >= azul){
hsv.h = 60 * (verde - azul)/ (Maximo - Minimo) ;
}else if(Maximo == vermelho && verde < azul){
hsv.h = 60 * (verde - azul)/(Maximo - Minimo) + 360;
}else if(Maximo == verde){
hsv.h = 60 * (azul - vermelho)/(Maximo - Minimo) + 120;
}else if(Maximo == azul){
hsv.h = 60 * (vermelho - verde)/(Maximo - Minimo) + 240;
}
hsv.s = (Maximo - Minimo) / Maximo;
hsv.v = Maximo;
return hsv;
}