Java Android中的HSVToColor工作起来有点奇怪
这是我的代码,它应该获取一个颜色int,将其转换为HSV,将0.5添加到色调并转换回int。但是在输出中,不是0xFF00FFFF,而是-64768。。。你知道有什么问题吗Java Android中的HSVToColor工作起来有点奇怪,java,android,Java,Android,这是我的代码,它应该获取一个颜色int,将其转换为HSV,将0.5添加到色调并转换回int。但是在输出中,不是0xFF00FFFF,而是-64768。。。你知道有什么问题吗 int c = 0xFFFF0000; /// RED float[] hsv = new float[3]; Color.colorToHSV( c, hsv ); /// splitting "c" into hsv hsv[0] = hsv[0]+0.5f; /// adding
int c = 0xFFFF0000; /// RED
float[] hsv = new float[3];
Color.colorToHSV( c, hsv ); /// splitting "c" into hsv
hsv[0] = hsv[0]+0.5f; /// adding 0.5 to Hue
int c1 = Color.HSVToColor( hsv ); /// converting hsv back to int
Log.e("color: ", String.valueOf(c1) ); /// outputting new color int
// should be "0xFF00FFFF" (light bule) , but is "-64768" hmm...
谢谢 您没有以十六进制打印字符串。 而是打印原始int值
十六进制的值是FFFF0300,这是有意义的。您没有用十六进制打印字符串。 而是打印原始int值
十六进制中的值是FFFF0300,这很有意义。我使用以下代码以十六进制字符串格式打印颜色,大小固定(颜色分量为2个字符)
我使用以下代码以十六进制字符串格式打印颜色,大小固定(颜色组件为2个字符)
你说得对!:)现在知道如何将其转换为十六进制整数了吗?使用
Integer.toHexString(c1)
你说得对!:)现在知道如何将其转换为十六进制整数了吗?使用Integer.toHexString(c1)
一些Formatter
magic:String.format(“#%08x”,颜色)
(或大写的X
)可能快得多(没有String+=
和更少的方法调用),使用一些Formatter
magic:String.format(#%08x),颜色)也可以实现同样的效果
(或大写的X
)可能快得多(没有String+=
和更少的方法调用)
public abstract class ColorHelper {
public static String toARGBString(int color) {
String ret;
ret = "#";
ret += fix(Integer.toHexString(Color.alpha(color)));
ret += fix(Integer.toHexString(Color.red(color)));
ret += fix(Integer.toHexString(Color.green(color)));
ret += fix(Integer.toHexString(Color.blue(color)));
return ret.toUpperCase();
}
private static String fix(String input) {
if (input.length() == 1) {
return "0" + input;
}
return input;
}
}