今天在做方面的安卓的图像显示的时候,需要实时的改变图片的颜色,然而,客户端接收的都是RGB值,而JAVA中的BITAMP类构造时,需要的是一个颜色值,所以需要一个类似new Color(int r,int g,int b)的函数。由于JAVA.AWT.Color这个JAVA中的颜色类不能用,而ANDOID的应用中好像没有提出类似的方法,本人就想直接使用最原始的方法获得颜色值:
int color = (r<<16)|(g<<8)|(b)
然而根据此颜色得到的图像却显示不出来。为探究其原因,首先打印出了COLOR.RED值,发现竟然是负值,然后查了查ANDOID的COLOR的方法发现所有的颜色值都是负的,接着查看其16进制编码发现 绿色为-16711936 (0xff00ff00)。发现JAVA中的颜色都是补码的方式输出结果的,而且ALPHA值默认255(透明时可以设置其它值)开始,不能省略,而32位中第一位的1被当作了负号使用,从而0xff00ff00成了-16711936。因此可以把颜色的获取方法改为如下:
int color = (0xff000000)|(r<<16)|(g<<8)|(b)
问题解决