gpt4 book ai didi

Java不接受无符号字节,我正在尝试映射它们

转载 作者:行者123 更新时间:2023-12-02 10:33:35 29 4
gpt4 key购买 nike

我需要映射2个字节,这样如果起始位置(或rgb颜色,以字节编码)以255(或127以上的任何值)开头,并且需要以0结束,在一行中例如 30 个段。数学非常简单:您只需制作 ((0-255*segment)/30)(255-0) ,对于每个段,您的字节数会少一些。这只是线性混合的数学无论如何,其他语言有一个名为 map 的函数可以做到这一点。 Example of Map in 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));
}


}

最佳答案

虽然对无符号字节的语言支持很好,可能是比有符号字节更好的选择,但您可以很容易地将一种字节转换为另一种字节。

byte b = // some signed value
int unsigned = b & 0xFF;

简而言之,将所有计算都作为 int 值进行,并且仅将其转换为字节以进行存储或兼容性。

由于您可能要混合大量像素,因此您甚至可以使用 floatdouble 进行计算,并在需要时转换为字节。

关于Java不接受无符号字节,我正在尝试映射它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462481/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com