原理很简单,只要画水平线时,每写一个像素,坐标会自动后移一位。所以没必要每次都指定坐标,把设置坐标的时间给节约出来。
最后就是画图函数了,我的LCD是16位的,所以我只修改了DrawBitLine16BPP一个函数,如果你的是低于16位的,同理进行修改。
参考如下
- 原函数
- static void DrawBitLine16BPP(int x, int y, U16 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) {
- LCD_PIXELINDEX pixel;
- if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
- if (pTrans) {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- LCD_L0_SetPixelIndex(x, y, *(pTrans + pixel));
- }
- } else {
- for (;xsize > 0; xsize--, x++, p++) {
- LCD_L0_SetPixelIndex(x, y, *p);
- }
- }
- } else {
- if (pTrans) {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- if (pixel) {
- LCD_L0_SetPixelIndex(x, y, *(pTrans + pixel));
- }
- }
- } else {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- if (pixel) {
- LCD_L0_SetPixelIndex(x, y, pixel);
- }
- }
- }
- }
- }
- 修改后如下
- static void DrawBitLine16BPP(int x, int y, U16 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) {
- LCD_PIXELINDEX pixel;
-
- LCD_SetCursor(x, y);
- if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
- if (pTrans) {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- LCD_SetPoint(*(pTrans + pixel));
- }
- } else {
- for (;xsize > 0; xsize--, x++, p++) {
- LCD_SetPoint(*p);
- }
- }
- } else {
- if (pTrans) {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- if (pixel) {
- LCD_SetPoint(*(pTrans + pixel));
- }
- }
- } else {
- for (; xsize > 0; xsize--, x++, p++) {
- pixel = *p;
- if (pixel) {
- LCD_SetPoint(pixel);
- }
- }
- }
- }
- }
好了,修改完了,可以进行测试了。
|