Мне нужно отобразить 2 байта, так что если начальная позиция (или цвет rgb, который закодирован в байтах) начинается с 255 (или что-нибудь выше 127), и она должна заканчиваться на 0, в строкенапример 30 сегментов.Математика довольно проста: вы просто делаете ((0-255 * сегмент) / 30) (255-0), и для каждого сегмента у вас будет немного меньше байта.В любом случае, это просто математика для линейного смешивания, в других языках есть функция map, которая делает именно это. Пример Map в C ++ Но проблема в том, что мне нужна эта функция в Java.Поэтому я решил сделать свой собственный.Причина в том, что мне нужно смешивать цвета с одной стороны на другую.Так что я сделал это простое приложение, но оно не работает, потому что, когда вычисленные байты превышают 127, Java думает, что его значение находится ниже начальной точки.Код здесь.первая функция - это метод java, который пытается исчезнуть, а вторая функция - это функция, которая пытается выполнить вычисление отображения:
public ColorRGB[] olas(ColorRGB color1, ColorRGB color2) {
ColorRGB[] colordevuelto=new ColorRGB[30];
byte longuitud=30;
//so we get two colors and fade and merge them at some point
for(byte h=0;h<longuitud;h++) {
byte rojofinal= map(color1.getRed(),color2.getRed(),(byte) 0,longuitud,h);
byte azulfinal= map(color1.getBlue(),color2.getBlue(),(byte) 0,longuitud,h);
byte verdefinal= map(color1.getGreen(),color2.getGreen(),(byte) 0,longuitud,h);
System.out.println("Led num: "+h+"Componente roja: "+ Byte.toString(rojofinal)+" componente verde: "+Byte.toString(verdefinal)+" componente azul "+Byte.toString(azulfinal));
colordevuelto[h]=new ColorRGB(rojofinal,verdefinal,azulfinal);
}
return colordevuelto; //devuelve un array de color fadeado a lo largo de 30 pixeles
}
private byte map (byte xinicio, byte xfinal,byte ymin,byte ymax, byte point) {
//this funtion is for mapping from one side to another
if(point > ymax || point <ymin) {
return 0; //Esto no deberia pasar nunca
}
if(xfinal>xinicio) {
return (byte) (((xfinal-xinicio)*point)/(ymax-ymin));
}
else {
return (byte) (((xfinal-xinicio)*point)/(ymax-ymin)+(xinicio-xfinal));
}
}