刚好有个画斜线的函数 你看凑合用不
改一下 就成了画一个斜的矩形 再改一下就成了中间的叉了
// 在指定的位置画斜线
// 入参 x0, y0, x1, y1: 所画线的位置
void LCD_paintLineOblique(int x0, int y0, int x1, int y1)
{
int x, y;
uint16_t * pixel, * pRam;
uint32_t slope;
if (x0 == x1)
{
LCD_paintLineVertical(x0, y0, y1);
return;
}
if (y0 == y1)
{
LCD_paintLineHorizontal(x0, y0, x1);
return;
}
if (x1 < x0)
{
x = x0;
y = y0;
x0 = x1;
y0 = y1;
x1 = x;
y1 = y;
}
if (y1 > y0)
{
slope = ((uint32_t)(y1-y0) << 10)/((uint32_t)(x1-x0));
}
else
{
slope = ((uint32_t)(y0-y1) << 10)/((uint32_t)(x1-x0));
}
pRam = g_lcdFrame;
pixel = pRam + y0*g_lcdHSize + x0;
y = y0;
if (g_lcdPenSize > 1)
{
lcdPaintCircle1(x0, y0, pRam);
lcdfillColor(x0, y0, g_lcdPenColor, pRam);
}
else
{
*pixel = g_lcdPenColor;
}
pixel++;
for (x = x0 + 1; x <= x1; x++)
{
// X在确定的情况下,找一个合适的Y点
if (y1 > y0)
{
while ((((uint32_t)(y - y0) << 10) < slope*(x-x0)))
{
y++;
pixel+=g_lcdHSize;
}
}
else
{
while ((((uint32_t)(y0 - y) << 10) < slope*(x-x0)))
{
y--;
pixel-=g_lcdHSize;
}
}
// 循环退出,Y点已找到。
if (g_lcdPenSize > 1)
{
lcdPaintCircle1(x, y, pRam);
}
else
{
*pixel = g_lcdPenColor;
}
pixel++;
}
}
|