2013-03-25 80 views
0

伙计们。在Java中着色RGB像素

我一直在研究一些代码,它涉及到绘制像素。我来到翻过下面这段代码:

pixels[x + y * width] = i * 128; 

似乎我无法理解的是:当为奇数时,像素以蓝色绘制;当是偶数,他们被绘制成黑色。我已阅读了关于rgb = 65536 * r + 256 * g + b,但我未能将此问题纳入此逻辑。例如,为什么2688(21 * 128)和2816(23 * 128)绘制蓝色像素,而2816(22 * 128)绘制黑色?

感谢您的任何帮助。

回答

3

i * 128 modulo 256是蓝色值。如果i是奇数,那么i * 128模256是128,一个中等蓝色。如果i是偶数,那么i * 128 modulo 256是0,没有蓝色分量。如果i为21(i * 128/256),则绿色部件为10,如果i为22或23则为11,并且几乎为黑色。这里的结果值不够高,不足以“溢出”并创建一个红色组件;在这里为i值为21或23.

0

蓝色值为0到255,一旦你高于255你开始设置绿色。 rgb值是以整数编码的字节,因此整数的第一个字节未使用,第二个字节为红色,第三个绿色和第四个蓝色。您可能会发现移动字节值而不是乘数来移动字节更容易。