专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
uc/gui学习笔记,不是网上复制的,绝对是自己整理(不断更新)
2019-08-14 06:39
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
7545
32
1791
2-D图形库,
这个有些复杂,花了半天时间整理完毕
不容易理解的函数,都有举例
有问题大家交流
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
正点原子
1楼-- · 2019-08-14 07:04
GUI_ClearRect(0,0,100,100);//画矩形函数,以背景 {MOD}填充
GUI_FillRect(100,100,150,150);//画矩形函数,以前景 {MOD}填充
GUI_DrawPixel(20,20);//画一个点。以前景 {MOD}填充
是所有画图的基础
GUI_DrawPoint(20,20);//以当前的笔大小画点,也就是要配合PenSize使用
GUI_SetPenSize(10); //设置画线的粗细
GUI_DrawPoint(20,20);
配合使用就是以20,20为圆心,(10-1)/2为半径画圆,且填充
GUI_InvertRect(30,0,60,20);与GUI_FillRect(100,100,150,150);没看出什么不同的地方
绘制位图
GUI_DrawBitmap();
例 extern const GUI_BITMAP bmaaa;
void main()
{
GUI_DrawBitmap(&bmaaa,x,y);
}
x,y是要显示图片的起始坐标
GUI_BITMAP是GUI的一个结构体名
bmaaa是用GUI的位图转换器生成.c或.h文件里面指向图像数组的结构体名
如下面的bmIMG在程序中代替bmaaa可在x,y显示一副BMP图片
GUI_CONST_STORAGE GUI_BITMAP bmIMG = {
48, /* XSize */
48, /* YSize */
48, /* BytesPerLine */
8, /* BitsPerPixel */
acIMG, /* 
ointer to picture data (indices) */
&PalIMG /* 
ointer to palette */
};
GUI_DrawBitmapMag(&bmIMG,x,y,xmul,ymul);可以把图片放大
暂时没发现可以缩小,xmul ymul写小于1的数就没显示了
画线
GUI_DrawHline(y,x0,x1);画水平线的函数
就是画水平线比Drawline快点,,,特定情况很有用
GUI_DrawVline(y,x0,x1);画垂直线的函数
GUI_DrawLine(x0,y0,x1,y1);画线
GUI_DrawLineRel(dx,dy);从当前坐标x,y画一条线到x+dx,y+dy坐标的线
GUI_DrawLineTo(x1,y1);从当前坐标x,y画一条线到x1,y1坐标的线
GUI_DrawPolyLine(const GUI_POINT* pPoint,int NumPoints,int x,int y)
pPoint 指向所显示的折线的指针
NumPoints点系列中指定点的数量
x,y 原点的坐标
绘多边形
GUI_DrawPolygon(apoint,countof(apoint),x,y);
#define countof(Array) (sizeof(Array)/sizeof(Array[0]))
const GUI_POINT apoint[]=
{
{0,0},{50,0},{80,60},{40,90},{20,20}
};
画多边形的轮廓,x,y为起点坐标
countof(apoint)是定义的宏,计算apoint[]中有多少点,也可以自己指定 数字,如果指定的数字n小于点的个数,会舍弃n后面的点
如果大于则会产生固定的点坐标
apiont是点的数组指针
GUI_FillPolygon(apoint,countof(apoint),0,0);
用法同上,只是会以前景 {MOD}填充
GUI_EnlargePolygon(aEnlargedPoints,apoint,countof(apoint),20);
将一个多边形点的数组放大,把放大后的数组放到新数组里面,注意这个函数不 显示图形,
首先要定义变量GUI_POINT aEnlargedPoints[countof(apoint)];当作目标数组
调用GUI_EnlargePolygon()函数把原数组apoint[]放大保存到aEnlargedPoints []
最后调用显示函数GUI_DrawPolygon(aEnlargedPoints,countof(apoint),100,100);
20表示对多边形的所有边扩大20像素,是加上20,如果是1,也是有变化的
GUI_MagnifyPolygon(aEnlargedPoints,apoint,countof(apoint),mag);
其实也是放大,只是从不同的角度上变化
mag是把图形放大mag倍
如果mag是1则没变化,和 GUI_EnlargePolygon是有区别的
GUI_RotatePolygon(aEnlargedPoints,apoint,countof(apoint),10);
旋转图形,以弧度为单位,注意也是只旋转不显示的,要配合GUI_FillPolygon或者
GUI_DrawPolygon使用
2π约等于6.28,=360度,所以注意数值不是很大
画圆
GUI_DrawCircle(x0,y0,r);圆心,半径画圆180>=r>=0,r=0.则画点
GUI_FillCircle(x0,y0,r);圆心,半径画圆,填充,180>=r>=0,r=0.则画点
画椭圆
GUI_DrawEllipse(x0,y0,rx,ry);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径
GUI_FillEllipse(x0,y0,rx,ry);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径,填充
画圆弧
GUI_DrawArc(x,y,rx,ry,a0,a1);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径
a0起始角度,a1终止角度
角度是以与x轴正方向的夹角
加载中...
xsx127
2楼-- · 2019-08-14 09:28
为什么贴出来呢
加载中...
正点原子
3楼-- · 2019-08-14 12:35
方便阅读
加载中...
郭震2009
4楼-- · 2019-08-14 14:43
谢谢分享... gui的手册讲的太模糊了..
加载中...
yxz1212_bao
5楼-- · 2019-08-14 18:55
精彩回答 2 元偷偷看……
加载中...
ranguangxu1012
6楼-- · 2019-08-14 22:15
不错,比手册上面易懂
加载中...
1
2
3
4
5
6
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
GUI_FillRect(100,100,150,150);//画矩形函数,以前景 {MOD}填充
GUI_DrawPixel(20,20);//画一个点。以前景 {MOD}填充
是所有画图的基础
GUI_DrawPoint(20,20);//以当前的笔大小画点,也就是要配合PenSize使用
GUI_SetPenSize(10); //设置画线的粗细
GUI_DrawPoint(20,20);
配合使用就是以20,20为圆心,(10-1)/2为半径画圆,且填充
GUI_InvertRect(30,0,60,20);与GUI_FillRect(100,100,150,150);没看出什么不同的地方
绘制位图
GUI_DrawBitmap();
例 extern const GUI_BITMAP bmaaa;
void main()
{
GUI_DrawBitmap(&bmaaa,x,y);
}
x,y是要显示图片的起始坐标
GUI_BITMAP是GUI的一个结构体名
bmaaa是用GUI的位图转换器生成.c或.h文件里面指向图像数组的结构体名
如下面的bmIMG在程序中代替bmaaa可在x,y显示一副BMP图片
GUI_CONST_STORAGE GUI_BITMAP bmIMG = {
48, /* XSize */
48, /* YSize */
48, /* BytesPerLine */
8, /* BitsPerPixel */
acIMG, /* ointer to picture data (indices) */
&PalIMG /* ointer to palette */
};
GUI_DrawBitmapMag(&bmIMG,x,y,xmul,ymul);可以把图片放大
暂时没发现可以缩小,xmul ymul写小于1的数就没显示了
画线
GUI_DrawHline(y,x0,x1);画水平线的函数
就是画水平线比Drawline快点,,,特定情况很有用
GUI_DrawVline(y,x0,x1);画垂直线的函数
GUI_DrawLine(x0,y0,x1,y1);画线
GUI_DrawLineRel(dx,dy);从当前坐标x,y画一条线到x+dx,y+dy坐标的线
GUI_DrawLineTo(x1,y1);从当前坐标x,y画一条线到x1,y1坐标的线
GUI_DrawPolyLine(const GUI_POINT* pPoint,int NumPoints,int x,int y)
pPoint 指向所显示的折线的指针
NumPoints点系列中指定点的数量
x,y 原点的坐标
绘多边形
GUI_DrawPolygon(apoint,countof(apoint),x,y);
#define countof(Array) (sizeof(Array)/sizeof(Array[0]))
const GUI_POINT apoint[]=
{
{0,0},{50,0},{80,60},{40,90},{20,20}
};
画多边形的轮廓,x,y为起点坐标
countof(apoint)是定义的宏,计算apoint[]中有多少点,也可以自己指定 数字,如果指定的数字n小于点的个数,会舍弃n后面的点
如果大于则会产生固定的点坐标
apiont是点的数组指针
GUI_FillPolygon(apoint,countof(apoint),0,0);
用法同上,只是会以前景 {MOD}填充
GUI_EnlargePolygon(aEnlargedPoints,apoint,countof(apoint),20);
将一个多边形点的数组放大,把放大后的数组放到新数组里面,注意这个函数不 显示图形,
首先要定义变量GUI_POINT aEnlargedPoints[countof(apoint)];当作目标数组
调用GUI_EnlargePolygon()函数把原数组apoint[]放大保存到aEnlargedPoints []
最后调用显示函数GUI_DrawPolygon(aEnlargedPoints,countof(apoint),100,100);
20表示对多边形的所有边扩大20像素,是加上20,如果是1,也是有变化的
GUI_MagnifyPolygon(aEnlargedPoints,apoint,countof(apoint),mag);
其实也是放大,只是从不同的角度上变化
mag是把图形放大mag倍
如果mag是1则没变化,和 GUI_EnlargePolygon是有区别的
GUI_RotatePolygon(aEnlargedPoints,apoint,countof(apoint),10);
旋转图形,以弧度为单位,注意也是只旋转不显示的,要配合GUI_FillPolygon或者
GUI_DrawPolygon使用
2π约等于6.28,=360度,所以注意数值不是很大
画圆
GUI_DrawCircle(x0,y0,r);圆心,半径画圆180>=r>=0,r=0.则画点
GUI_FillCircle(x0,y0,r);圆心,半径画圆,填充,180>=r>=0,r=0.则画点
画椭圆
GUI_DrawEllipse(x0,y0,rx,ry);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径
GUI_FillEllipse(x0,y0,rx,ry);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径,填充
画圆弧
GUI_DrawArc(x,y,rx,ry,a0,a1);x ,y圆心坐标,rx是x轴半径 ,ry是y轴半径
a0起始角度,a1终止角度
角度是以与x轴正方向的夹角
一周热门 更多>