我的应用程序是从图库中调用图像,当您单击图像的某个位置时,它会显示颜色。我正面临一个问题;我正在使用这些代码来获取图像上每个位置的颜色值。有趣的是,它正确地检测颜色值(即红色显示r = 255,g = 0,b = 0)但是当谈到颜色名称时(我使用'TextToSpeech'来说出颜色名称) ),它主要是说“颜色是黑色的(除非你点击白色,它说颜色是白色的。 这是我的代码:
if ((Color.red(pixel) & Color.blue(pixel) & Color.green(pixel))> 220) {
if(TTSInitialized){
mTts.speak("Color is White", TextToSpeech.QUEUE_FLUSH, null);
}
textViewCol.setText("Color is White.");
return true;}
if ((Color.red(pixel) & Color.blue(pixel) & Color.green(pixel)) < 10) {
if(TTSInitialized){
mTts.speak("Color is Black", TextToSpeech.QUEUE_FLUSH, null);
}
textViewCol.setText("Color is Black.");
return true;}
if ((Color.red(pixel) & Color.blue(pixel)) > 120) {
if(TTSInitialized){
mTts.speak("Color is Purple", TextToSpeech.QUEUE_FLUSH, null);
}
textViewCol.setText("Color is Purple.");
return true;}
if (Color.red(pixel) > (Color.blue(pixel) & Color.green(pixel))) {
if(TTSInitialized){
mTts.speak("Color is RED", TextToSpeech.QUEUE_FLUSH, null);
}
textViewCol.setText("Color is Red.");
return true;}
我的应用程序有红色,绿色,蓝色,黄色,紫色,青色,黑色和白色。现在的问题是:我正在编写代码的方式是否正确?如果没有,你有什么建议?为什么它总是说黑色,无论你点击红色,蓝色还是任何其他颜色?!
答案 0 :(得分:1)
你在第二次检查时有点偏僻。我想你想要这个:
if ((Color.red(pixel) | Color.blue(pixel) | Color.green(pixel)) < 10) {
if(TTSInitialized){
mTts.speak("Color is Black", TextToSpeech.QUEUE_FLUSH, null);
}
textViewCol.setText("Color is Black.");
return true;
}
通过这种方式,您可以获取值并获取累积金额,而不是三个值中的最小值。
例如:
3 | 7 | 255 = 255
但3&amp; 7&amp; 255 = 3
另外,通过您的所有检查,我可能会重做它们。 &安培;实际上是检查更多的位掩码而不是强度。使用&amp;,您只能获得每个数字中设置的位。
白色,我使用:
if (Color.red(pixel) > 220 && Color.blue(pixel) > 220 && Color.green(pixel) > 220)
表示紫色:
if (Color.red(pixel) > 120 && Color.blue(pixel) > 120)
表示红色:
if (Color.red(pixel) > (Color.blue(pixel) | Color.green(pixel)))