Tworze zmienną Q i nadaje jej wartość 0.0.
Później nic z nią nie robię a później ma ona jakąś losową wartość, całkiem inną niż 0.0 które jej przypisałem.
Co robię źle?
Nie sądzę, że to istotne, ale na wszelki wypadek:
Kod pobiera piksel z danego obrazka(BufferedImage), wyciąga z niego kanały rgb i normalizuje je, po czym ma nastąpić ich zamiana na hsl.
double Q = 0.0, P=0d;
System.out.println(Q);**// tu jeszcze jest 0.0**
int[] hsl=new int[3];
int rgb1;
for(int i=0;i<input.getWidth();i++){
for(int j=0;j<input.getHeight();j++){
rgb=normalize(getRGBfactors(input.getRGB(i, j)), 255);
min=Math.min(Math.min(rgb[0], rgb[1]), rgb[2]);
max=Math.max(Math.max(rgb[0], rgb[1]), rgb[2]);
dm=max-min;
L=(max+min)/2;
if(L==0.0||max==min){
S=0.0;
}else if(L>0&&L<=0.5){
S=dm/2L;
}else if(L>0.5){
S=dm/(2-2L);
}
if(max==min){
H=0;
}else if(max==rgb[0]&&rgb[1]>=rgb[2]){
H=(int) (60 * (rgb[1] - rgb[2]) / dm);
}else if(max==rgb[0]&&rgb[1]<rgb[2]){
H=(int) (60 * (rgb[1] - rgb[2]) / dm)+360;
}else if(max==rgb[1]){
H=(int) (60 * (rgb[2] - rgb[0]) / dm)+120;
}else if(max==rgb[2]){
H=(int) (60 * (rgb[0] - rgb[1]) / dm)+240;
}
if(which==0){
H+=factor;
}else if(which ==1){
S+=factor;
}else if(which ==2){
L+=factor;
}
if(S==0.0){
rgb[0]=L;
rgb[1]=L;
rgb[2]=L;
}else{
if(L<0.5){
System.out.println(Q); **//W tym miejscu Q zawiera różne dziwne(inne niż 0.0) wartości, łączne z NaN**
Q = L * (1.0 + S);//Q==NaN ??