java自定义颜色问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 08:27:53
int red = (j*3|i)&0xff; /*定义红色的值*/
int green = (j|i*2)&0xff;
int blue = (j*6|i*8)&0xff;
/*对index位置上的像素点赋值,并将index加1,语句中的<<是移位运算符*/
pixNum[index++] = (255)|(red<<64)|(green<<24)|(blue<<128);

哪位高手帮我解释下为什么红色的值是这么定义?有什么好处啊(为什么不直接用red)? 还有为像素点赋值的时候是这么运算的??答的好的再加分~~
i j 都是定义的控制循环变量 代表像素点的位置 i在外循环 j在内循环
pixNum是个数组 用来盛放该像素点的颜色

还是不明白,既然255跟任何数‘或’都是11111111或01111111 那么数组里的数只有两个值啊?为什么绘图后有几种颜色呢?还有,难道数11111111和01111111都可以代表一个颜色?

http://263770629.qzone.qq.com/infocenter?ADUIN=263770629&ADSESSION=1255167105&ADTAG=CLIENT.QQ.1881_QQUrlReportBlankZone.0看看我空间的文章吧 看完就懂了 愿意分享。
红绿蓝与0xff‘与’是为了给红绿蓝(整型)前24位置0。我懂了 呵呵~~

&按位与、|按位或、<<位移运算。
pixNum[index++] = (255)|(red<<64)|(green<<24)|(blue<<128);
先赋值,再++。
但是,为什么要与255进行“或”呢?
255,正数,原码是0111 1111,反码是0111 1111,补码是0111 1111。
显然,255跟任何数“或”,是补码进行“或”,结果不是1111 1111,就是0111 1111。当对方为负数时,为前者;当对方为正数时,为后者。即:考察符号位是1还是0。

所以感觉数组赋值那句话,是在选取颜色,红绿蓝分别进行了位移运算,移动的位数就是待考察的位置,移动了之后,通过判断结果是1111 1111还是0111 1111,从而得知红绿蓝中有几种颜色的待考察位置符合要求。

至于前三句,跟0xFF“与”,我就很不理解了,没意义的嘛。
这几句代码,应该是某个具体应用的吧,貌似与硬件关系密切,单纯分析代码很难,结合实际吧,是做什么用的,从那里下手好些。

pixNum[index++] 这种写法,在C编写单片机时会用到,java应用程序好像很少这样写,习惯而已。