/* * \brief Draw a line on LCD, which is not horizontal or vertical. * * \param x X-coordinate of line start. * \param y Y-coordinate of line start. * \param length line length. * \param direction line direction: 0 - horizontal, 1 - vertical. * \param color LcdColor_t color. */ extern uint32_t LCDD_DrawLineBresenham( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 , uint32_t color) { int dx, dy ; int i ; int xinc, yinc, cumul ; int x, y ; x = dwX1 ; y = dwY1 ; dx = dwX2 - dwX1 ; dy = dwY2 - dwY1 ; xinc = ( dx > 0 ) ? 1 : -1 ; yinc = ( dy > 0 ) ? 1 : -1 ; dx = ( dx > 0 ) ? dx : -dx ; dy = ( dy > 0 ) ? dy : -dy ; LCDD_DrawPixel(x , y , color); if ( dx > dy ) { cumul = dx / 2 ; for ( i = 1 ; i <= dx ; i++ ) { x += xinc ; cumul += dy ; if ( cumul >= dx ) { cumul -= dx ; y += yinc ; } LCDD_DrawPixel(x , y , color); } } else { cumul = dy / 2 ; for ( i = 1 ; i <= dy ; i++ ) { y += yinc ; cumul += dx ; if ( cumul >= dy ) { cumul -= dy ; x += xinc ; } LCDD_DrawPixel(x , y , color); } } return 0 ; }
/** * \brief Draws a circle on LCD, at the given coordinates. * * \param x X-coordinate of circle center. * \param y Y-coordinate of circle center. * \param r circle radius. * \param color circle color. */ extern uint32_t LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color ) { signed int d; /* Decision Variable */ uint32_t curX; /* Current X Value */ uint32_t curY; /* Current Y Value */ d = 3 - (r << 1); curX = 0; curY = r; while (curX <= curY) { LCDD_DrawPixel(x + curX, y + curY, color); LCDD_DrawPixel(x + curX, y - curY, color); LCDD_DrawPixel(x - curX, y + curY, color); LCDD_DrawPixel(x - curX, y - curY, color); LCDD_DrawPixel(x + curY, y + curX, color); LCDD_DrawPixel(x + curY, y - curX, color); LCDD_DrawPixel(x - curY, y + curX, color); LCDD_DrawPixel(x - curY, y - curX, color); if (d < 0) { d += (curX << 2) + 6; } else { d += ((curX - curY) << 2) + 10; curY--; } curX++; } return 0; }
//------------------------------------------------------------------------------ /// Draws a rectangle inside a LCD buffer, at the given coordinates. /// \param pBuffer LCD buffer to draw on. /// \param x X-coordinate of upper-left rectangle corner. /// \param y Y-coordinate of upper-left rectangle corner. /// \param width Rectangle width in pixels. /// \param height Rectangle height in pixels. /// \param color Rectangle color. //------------------------------------------------------------------------------ void LCDD_DrawRectangle( void *pBuffer, unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int color) { unsigned int rx, ry; for (ry=0; ry < height; ry++) { for (rx=0; rx < width; rx++) { LCDD_DrawPixel(pBuffer, x+rx, y+ry, color); } } }
void Sg_DrawPixel(int X,int Y,SgColor color) { LCDD_DrawPixel(X,Y,color); }