LCD 填充颜 {MOD}块问题

2019-07-20 10:54发布

有个函数  LCD_Color_Fill。。在指定区域内填充指定颜 {MOD}块。 为什么 只能填充 正方形的区域比如 200×200 的  如果填充 长方形区域 200×300 的话  就无法正常显示出来了。





问题 已经解决:


代码中的  color[i*width+j]    不知道为什么我写成   color[i*height+j] 了。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
幽灵骑士
1楼-- · 2019-07-20 16:07
我是 用 读点 函数  先读出  200×200 区域内的点数据 , 然后用  LCD_Color_Fill 显示 , 显示都正常 。, 可是我开始读200×300区域的点数据。,然后用LCD_Color_Fill 显示出来 200×300 的块 就图像乱了,一点都不正常。
正点原子
2楼-- · 2019-07-20 17:53
 精彩回答 2  元偷偷看……
幽灵骑士
3楼-- · 2019-07-20 19:43
[mw_shl_code=c,true]//在指定区域内填充指定颜 {MOD}块 //(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为ex-sx+1)*(ey-sy+1) //color:要填充的颜 {MOD} void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color) { u16 height,width; u16 i,j; width=ex-sx+1; //得到填充的宽度 height=ey-sy+1; //高度 for(i=0;i<height;i++) { LCD_SetCursor(sx,sy+i); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM for(j=0;j<width;j++)LCD->LCD_RAM=color[i*height+j];//写入数据 } } [/mw_shl_code] [mw_shl_code=c,true]//读取个某点的颜 {MOD}值 //x,y:坐标 //返回值:此点的颜 {MOD} u16 LCD_ReadPoint(u16 x,u16 y) { u16 t=0; LCD_SetCursor(x,y); while(t<0X1FFF) { if(LCD->LCD_REG&0x0001)break; t++; } return LCD->LCD_RAM; }[/mw_shl_code] 读取 200*300 区域的点数据。
[mw_shl_code=c,true] for(y=0;y<300;y++) { for(x=0;x<200;x++) { rg=LCD_ReadPoint(lcddev.width/2-150+x,lcddev.height/2-100+y); i++; } }[/mw_shl_code] 显示 读取的 数据 :     读取和显示200×200 的数据都正常。也试过 100×200 的也是不行。
 注:  rg 是个很大的数组  可以完全存的下 300×300 的数据/『内存大任性』
[mw_shl_code=c,true]LCD_Color_Fill(lcddev.width/2-150,lcddev.height/2-100,lcddev.width/2-150+299,lcddev.height/2-100+199,rg);[/mw_shl_code]

正点原子
4楼-- · 2019-07-21 00:17
回复【4楼】幽灵骑士:
---------------------------------
i*height+j,这里有可能溢出,你改为u32的类型,试试。
QKX607
5楼-- · 2019-07-21 02:10
 精彩回答 2  元偷偷看……
孤独的鼬先生
6楼-- · 2019-07-21 07:49
正点原子 发表于 2015-4-8 23:24
回复【4楼】幽灵骑士:
---------------------------------
i*height+j,这里有可能溢出,你改为u32的类型, ...

原子哥,是u16的类型溢出了,不过有点不明白,我试了填充几个颜 {MOD}显示是花的,请问这个函数用途和执行过程。。

一周热门 更多>