r=LCD_RD_DATA(); //实际坐标颜 {MOD}
if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510) //9341/NT35310/NT35510要分2次读出
{
opt_delay(2);
b=LCD_RD_DATA();
g=r&0XFF; //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
g<<=8;
}
if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0XB505||lcddev.id==0XC505)return r; //这几种IC直接返回颜 {MOD}值
else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510需要公式转
原子哥,这段代码最后一行我没有读懂啊。 return (((r>>11)<<11)|((g>>10)<<5)|(b>>11)) 这一句怎么来的???
假设g=r&0xff 不就是g=r吗??? 在转换的时候,假设r的十六位为15.1413.12.11.10.9.8.7.6.5.4.3.2.1.0先处理成了15.14.13.12.11.0.0.0.0.0.0.0.0.0.0.0
然后处理成了15.14.13.12.11.15.14.13.12.11.0.0.0.0.0.0 就是到这里我不明白了,RG不是各占据八位吗???这是怎么处理的???我没有看懂。麻烦解答一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
抱歉抱歉,我想错了,现在懂了。我把十六进制转二进制计算错了。非常抱歉。麻烦您了、
---------------------------------
对对,现在明白了。
一周热门 更多>