有个颜色值它的 r,g,b各占8位如 :r=0xf0, g=0xf8, b=0xff |
|
5分 |
r、g、b
是各占2位 前面的0x代表是16进制 笨方法: public String getRGBToString(int r,int g,int b){ int rgb=0; rgb=r*(int)Math.pow(16, 4)+g*(int)Math.pow(16, 2)+b; return Integer.toHexString(rgb).toUpperCase();//16进制字符串形式 } public int getRGBToInt(int r,int g,int b){ int rgb=0; rgb=r*(int)Math.pow(16, 4)+g*(int)Math.pow(16, 2)+b; return rgb;//默认输出是10进制 } |
那就是说要改变最大值了被。。。。。比如说int r = 0xfo 那么int newr =r*16*16*16*16 这就是改变范围了啊。。。。
|
|
我的意思是它原来是8位,现在要扩展到16位。你说的我看不明白。。。 |
|
不是,我没说清,我的意思是,不是要rgb的值,只把单一的一个分量值。比如r值,它原来是8位它的取值范围是0x00-0xff,(值越大代表r颜色越饱满)。现在我想把这个8位的r值扩展成16位来表示, |
|
rgb565
|
|
就是个等比运算啊
a/b = (2^16)/(2^8) a = (2^16)/(2^8) * b |
|
直接就各乘两个16就可以了啊。。。。等比扩大。。。小学生都懂的
|
|
能不能按需要给用java写个函数出来,90分上都是你的。劳驾谢谢! |
|
95分 |
试试
public static long toLargeRgb(int color){ long a = Color.alpha(color); long r = Color.red(color); long g = Color.green(color); long b = Color.blue(color); return a<<(48+8)|r<<(32+8) | g<<(16+8) | b<<8; } |
0xffff0000 转换为0xff00ff0000000000
|