很郁闷 一段很简单的代码 把ARGB转为RGBA,结果图像颜色偏红。
搞了很久,才知道问题出在了byte身上。
一个颜色分量8位,想当然的用了byte,组合成一个像素32位,就是
(r<<24)|(g<<16)|(b<<8)|(a)
问题就出在了byte到int的转换上
byte在Java中是有符号的 (win32中是unsigned char)
这样0xFF转成int就变成0xFFFFFFFF (-1)
也就是说如果蓝色 b=0xFF的话, 这样转化过后颜色就变为白色了
如果是绿色的话 就变黄色了
不知道Java在设计时怎么想的,byte为无符号才更加贴合我们的需要