/*************************************************************************************************************
* 文件名 : GDI.c
* 功能 : 图形设备接口(Graphics Device Interface)
* 作者 : cp1300@139.com
* 创建时间 : 2019-11-02
* 最后修改时间 : 2020-02-02
* 详细 : STM32F7 图形设备接口
*************************************************************************************************************/
#include "system.h"
#include "DMA2D.h"
#include "stm32f7_ltdc.h"
#include "DMA2D_GRAM.h"
#include "GDI.h"
//显示器Layer1 GRAM定义
const GRAM_HANDLE cg_LTDC_Layer1_GRAM_Handle =
{
DMA_INIT_OK,
(u32) &g_LTDC_BUFF_RGB888[0], //GRAM地址
DMA2D_COLOR_ARGB8888, //GRAM显存像素格式
LTDC_WIDTH, //GRAM宽度
LTDC_HEIGHT, //GRAM高度
(u32 *)&g_LTDC_BUFF_RGB888[0], //32bit颜色模式下显存指针
(u8 *)&g_LTDC_BUFF_RGB888[0], //24bit颜色模式下显存指针
(u16 *)&g_LTDC_BUFF_RGB888[0], //16bit颜色模式下显存指针
&cg_GDI_GRAM_Interface_32bit,
};
//显示器Layer2 GRAM定义
const GRAM_HANDLE cg_LTDC_Layer2_GRAM_Handle =
{
DMA_INIT_OK,
(u32) &g_LTDC_BUFF_RGB888[1], //GRAM地址
DMA2D_COLOR_ARGB8888, //GRAM显存像素格式
LTDC_WIDTH, //GRAM宽度
LTDC_HEIGHT, //GRAM高度
(u32 *)&g_LTDC_BUFF_RGB888[1], //32bit颜色模式下显存指针
(u8 *)&g_LTDC_BUFF_RGB888[1], //24bit颜色模式下显存指针
(u16 *)&g_LTDC_BUFF_RGB888[1], //16bit颜色模式下显存指针
&cg_GDI_GRAM_Interface_32bit,
};
/*************************************************************************************************************************
* 函数 : void GDI_DrawCircle(GRAM_HANDLE *pHandle, u16 Xpos,u16 Ypos,u16 Radius, u32 Color)
* 功能 : 绘制空心圆
* 参数 : pHandle:GRAM句柄;Xpos,Ypos:圆心坐标;Radius:半径;Color:颜色
* 返回 : 无
* 依赖 : 画点函数
* 作者 : cp1300@139.com
* 时间 : 2011-09-20
* 最后修改时间 : 2019-11-02
* 说明 : 无
*************************************************************************************************************************/
void GDI_DrawCircle(GRAM_HANDLE *pHandle, u16 Xpos,u16 Ypos,u16 Radius, u32 Color)
{
int a = 0,b = Radius;
int di;
di = 3 -(Radius << 1); //判断下个点位置的标志
#if(GDI_PARAMETER_CHECK) //参数检查
while(pHandle==NULL)
{
DEBUG("无效的句柄 pHandle\r\n");
SYS_DelayMS(1000);
}
#endif //GDI_PARAMETER_CHECK
while(a <= b)
{
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos - b,Ypos - a,Color); //3
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos + b,Ypos - a,Color); //0
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos - a,Ypos + b,Color); //1
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos - b,Ypos - a,Color); //7
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos - a,Ypos - b,Color); //2
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos + b,Ypos + a,Color); //4
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos + a,Ypos - b,Color); //5
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos + a,Ypos + b,Color); //6
pHandle->pBasicInterface->pDrawPoint(pHandle, Xpos - b,Ypos + a,Color);
a ++;
//使用Bresenham算法画圆
if(di<0)
di += 4 * a + 6;
else
{
di += 10 + 4 * (a - b);
b --;
}
}
}
|