Android 为什么这个Color.HSVToColor方法返回这个奇怪的值(带负号)?
这是一个SSCCE,用于证明当选中时,Android 为什么这个Color.HSVToColor方法返回这个奇怪的值(带负号)?,android,colors,hsv,color-space,android-color,Android,Colors,Hsv,Color Space,Android Color,这是一个SSCCE,用于证明当选中时,HSV颜色{11.0f,9.0f,215f}是白色的(尽管V或value,215的值在此工具上自动更改为100),而当我应用android的color.HSVToColor(float[]f)时应用了函数,结果是值-53504,当我查看减号时,它看起来可疑。此外,它的颜色原来是红色的 问题是为什么以及如何解决这个问题? MainActivity.java: public class MainActivity extends Activity { V
HSV
颜色{11.0f,9.0f,215f}
是白色的(尽管V
或value
,215
的值在此工具上自动更改为100
),而当我应用android的color.HSVToColor(float[]f)时应用了
函数,结果是值-53504
,当我查看减号时,它看起来可疑。此外,它的颜色原来是红色的
问题是为什么以及如何解决这个问题?
MainActivity.java:
public class MainActivity extends Activity {
View view;
TextView textView;
float [] hsv = {11.0f, 9.0f, 215.0f};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = findViewById(R.id.mainActivity_view);
textView = (TextView) findViewById(R.id.mainActivity_textView);
int androidColor = Color.HSVToColor(hsv);
view.setBackgroundColor(androidColor);
textView.setText(androidColor+"");
}
}
活动\u main.java:
public class MainActivity extends Activity {
View view;
TextView textView;
float [] hsv = {11.0f, 9.0f, 215.0f};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = findViewById(R.id.mainActivity_view);
textView = (TextView) findViewById(R.id.mainActivity_textView);
int androidColor = Color.HSVToColor(hsv);
view.setBackgroundColor(androidColor);
textView.setText(androidColor+"");
}
}
十进制负数是完全合理的。正好有一半的颜色是负数,因为Java没有无符号int
。使用Integer.toHexString()
并查看十六进制中的颜色值。此外,您的值超出了的范围,因为9f
不在0和1之间,215f
不在0和1之间。您的值似乎不适用于您的网站,因为该网站上的B必须介于1和100之间。但即使在这之后,它也需要在0和1之间进行规范化。我想,问问OpenCV4Android团队,他们是否是给你这些值的人。与Android docs一致,S和V的范围从0到1。我可以做出两个很好的猜测——这些不是浮点数,而是字节,在这种情况下,除以256会得到很好的值。或者它们应该在1到100之间,所以除以100会得到很好的值。如果返回216,我会先尝试256解决方案,然后再尝试100。您可能会发现以下阅读内容很有趣: