lkdGui
lkdGui copied to clipboard
GuiBitMap函数在更新全屏位图时不会刷新显示屏的最后一行和最后一列像素
我在自己的240*128显示屏上使用时发现了这个问题,这个问题貌似是函数中的坐标检查语句引起的,我对其进行了一些修改解决了这个问题
调用方式:GuiBitMap((uint8_t *)welcome_bitmap_bits, 0, 0, 240, 128, 0);
GuiBitMap函数参数检查部分修改前:
/* 检查坐标最大,超过不显示 */
if(x0 + xlen >= GUIXMAX){
xlen = GUIXMAX - x0 - 1;
}
if(y0 + ylen >= GUIYMAX){
ylen = GUIYMAX - y0 - 1;
}
GuiBitMap函数参数检查部分修改后:
/* 检查坐标最大,超过不显示 */
if(x0 + xlen > GUIXMAX){
xlen = GUIXMAX - x0 - 1;
}
if(y0 + ylen > GUIYMAX){
ylen = GUIYMAX - y0 - 1;
}
函数原型
void GuiAreaBitMap(lkdBitmap *bitMap,\
lkdCoord x0, lkdCoord y0, lkdCoord endx, lkdCoord endy, uint8_t flag)
1.画指定范围位图的函数存在当显示与屏幕尺寸大小相同的位图时,会直接返回。
if(x0 >= GUIXMAX || y0 >= GUIYMAX || endx >= GUIXMAX || endy >= GUIYMAX ||\
x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\
bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high)
{
return;
}
改为以下后显示正常:
if(x0 > GUIXMAX || y0 > GUIYMAX || endx > GUIXMAX || endy > GUIYMAX ||\
x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\
bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high)
{
return;
}
2.另外,使用该函数显示160*160的位图数据时,函数调用为:
GuiAreaBitMap(bitMapBuf,0, 0, 160, 160, 0);
我觉得可以把该函数内部实现略微修改,使得调用方式改为
GuiAreaBitMap(bitMapBuf,0, 0, 159, 159, 0);
这样更好一些,起点、终点坐标的使用与其他画图函数的使用方式保持一致。
这两个问题好像可以归结为一个问题,第2个改后就不会有1的问题了。 第一次使用Github,感觉码的有点混乱。。
wocao?我写错地方了吧。
wocao?我写错地方了吧。
emmmmm,好像是的
函数原型
void GuiAreaBitMap(lkdBitmap *bitMap,\ lkdCoord x0, lkdCoord y0, lkdCoord endx, lkdCoord endy, uint8_t flag)
1.画指定范围位图的函数存在当显示与屏幕尺寸大小相同的位图时,会直接返回。
if(x0 >= GUIXMAX || y0 >= GUIYMAX || endx >= GUIXMAX || endy >= GUIYMAX ||\ x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\ bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high) { return; }
改为以下后显示正常:
if(x0 > GUIXMAX || y0 > GUIYMAX || endx > GUIXMAX || endy > GUIYMAX ||\ x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\ bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high) { return; }
2.另外,使用该函数显示160*160的位图数据时,函数调用为:
GuiAreaBitMap(bitMapBuf,0, 0, 160, 160, 0);
我觉得可以把该函数内部实现略微修改,使得调用方式改为GuiAreaBitMap(bitMapBuf,0, 0, 159, 159, 0);
这样更好一些,起点、终点坐标的使用与其他画图函数的使用方式保持一致。这两个问题好像可以归结为一个问题,第2个改后就不会有1的问题了。 第一次使用Github,感觉码的有点混乱。。
好像部分位图相关函数的边界检查是有点问题,我们这两个问题是一样的
函数原型
void GuiAreaBitMap(lkdBitmap *bitMap,\ lkdCoord x0, lkdCoord y0, lkdCoord endx, lkdCoord endy, uint8_t flag)
1.画指定范围位图的函数存在当显示与屏幕尺寸大小相同的位图时,会直接返回。
if(x0 >= GUIXMAX || y0 >= GUIYMAX || endx >= GUIXMAX || endy >= GUIYMAX ||\ x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\ bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high) { return; }
改为以下后显示正常:
if(x0 > GUIXMAX || y0 > GUIYMAX || endx > GUIXMAX || endy > GUIYMAX ||\ x0 < 0 || y0 < 0 || endx < 0 || endy < 0 || endx == x0 || endy == y0 ||\ bitMap->beginx >= bitMap->wide || bitMap->beginy >= bitMap->high) { return; }
2.另外,使用该函数显示160*160的位图数据时,函数调用为:
GuiAreaBitMap(bitMapBuf,0, 0, 160, 160, 0);
我觉得可以把该函数内部实现略微修改,使得调用方式改为GuiAreaBitMap(bitMapBuf,0, 0, 159, 159, 0);
这样更好一些,起点、终点坐标的使用与其他画图函数的使用方式保持一致。 这两个问题好像可以归结为一个问题,第2个改后就不会有1的问题了。 第一次使用Github,感觉码的有点混乱。。好像部分位图相关函数的边界检查是有点问题,我们这两个问题是一样的
对。整屏刷的时候才会有问题。