想将屏幕上的某个点的颜色值获取出来,以便用来做鼠标,我在屏幕上用一个小矩形,通过上下左右按键来移动它,当移动到某一个图片的坐标范围内,按下确定键执行某一功能,如果用一个颜色来作为小矩形的背景色的话,当移动到某一个图片范围是,会将图标的颜色清掉,就像画图软件的橡皮擦功能一样,所以必须时刻获取任何坐标的颜色值作为小矩形的背景色,这样才不会擦除图片的颜色,可是我用了一个读数据函数,一个颜色转换函数,进行两次读数据操作,第一次虚读,第二次的值作为颜色值,并将GRB转换成RGB,最后返回颜色值color,结果获取到的颜色值都是为蓝色,所以还是会擦除图标颜色。不知道哪里有问题?请高手分析一下!
uint read_data()
{
uint dat1,dat2;
TFT_WR=1;
TFT_RS=1;
TFT_DATA=0xFF;
TFT_CS=0;
TFT_RD=1;
TFT_RD=0;
dat1 = TFT_DATA;
TFT_RD=1;
TFT_RD=0;
dat2 = TFT_DATA;
TFT_CS=1;
return ((dat1&0xff) | (dat2<<8));
}
/*********************************************************************************
** 函数名称: uint LCD_GetPoint(uchar x,uint y).
** 功能描述: LCD获取指定座标的颜色值.
** 输入参数: uchar x,uint y 位置.
** 输出参数: None.
** 返回参数: data1 颜色. //测试只能获取蓝色
**********************************************************************************/
uint LCD_GetPointcolor(uchar x,uint y)
{
uint color;
uchar B,G,R;
write_cmd_data(GRAM_XADDR,x);//设置X坐标位置
write_cmd_data(GRAM_YADDR,y);//设置Y坐标位置
write_cmd_data(WINDOW_XADDR_START,x);//水平起始位置
write_cmd_data(WINDOW_XADDR_END,x);//水平终止位置
write_cmd_data(WINDOW_YADDR_START,y);//垂直起始位置
write_cmd_data(WINDOW_YADDR_END,y);//垂直终止位置
write_cmd(0x00,0x22);//LCD_WriteCMD(GRAMWR);
color=read_data(); //* 虚读
color=read_data();
//*TFT为BGR模式,读出来的数据要做RGB交换
B=(color>>11)&0x001F;
R=(color<<11)&0xF800;
G=color&0x07E0;
color=R|G|B;
write_cmd_data(WINDOW_XADDR_START,0);
write_cmd_data(WINDOW_XADDR_END,239);
write_cmd_data(WINDOW_YADDR_START,0);
write_cmd_data(WINDOW_YADDR_END,319);
return color;
} |