EGE基础:基础绘图篇
EGE专栏:EGE专栏
目录
- 一、窗口绘图区的坐标系
- 一、画笔设置
- 1. 设置背景颜色
- 2. 设置当前绘画颜色
- 3. 设置填充颜色
- 4. 设置当前绘画线型
- 5. 设置当前绘画线宽
- 6. 绘图位操作模式
- 二、绘图目标:PIMAGE参数
- 1. 设置当前绘图目标
- 2. 获取当前绘图对象。
- 三、图形的绘制
- 1. 普通绘图函数
- 1.1 普通绘图函数带有锯齿
- 1.2 普通绘图函数使用的是RGB颜色
- 2. 绘图函数目录
- 2.1 绘图预览
- 2.2 绘图函数文档
- 2.3 补充:填充圆
- 3. 区域颜色填充
- 3.1 指定边界色填充(floodfill)
- 3.2 指定区域色填充(floodfillsurface)
一、窗口绘图区的坐标系
在调用 initgraph() 函数对图形环境进行初始化后,EGE会为我们创建出一个可用于绘图的图形窗口,接下来我们就可以在这个窗口上绘制出我们想要的图形。
绘制图形需要描述一个图形的位置和大小,所以在正式开始绘图前,我们需要先了解在窗口绘图区域中如何表示位置。
一、画笔设置
1. 设置背景颜色
1.1 设置背景颜色,并且将原来是背景颜色的像素替换成新的背景颜色
void setbkcolor(color_t color, PIMAGE pimg = NULL);
1.2 只设置背景颜色,对像素不做修改
void setbkcolor_f(color_t color, PIMAGE pimg = NULL);
- 所以想要改变背景颜色,并将屏幕上的背景颜色像素替换的话,选用setbkcolor()。
(如第一次设置背景颜色,想替换背景颜色的情况。)
- 如果想改变背景颜色设置,并且要进行清屏操作的话,选用setbkcolor_f()
(避免不想清屏的区域受影响)
- 只想改变背景颜色设置,不对屏幕背景色像素进行修改选用setbkcolor_f()
(避免不想清屏的区域受影响)
2. 设置当前绘画颜色
void setcolor(color_t color, PIMAGE pimg = NULL);
3. 设置填充颜色
void setfillcolor(color_t color, PIMAGE pimg = NULL);
4. 设置当前绘画线型
可以设置实线,虚线,点线等,还可以设置线宽
void setlinestyle(int linestyle, WORD upattern = NULL, int thickness = 1, PIMAGE pimg = NULL);
参数说明:setlinestyle( 线型, 自定义线性, 线宽, 绘制的目标)
- linestyle, 线型
linestyle只能从多个枚举中选择
enum line_styles { 线型注释SOLID_LINE = PS_SOLID, 实线 = 0CENTER_LINE = PS_DASH, 虚线 = 1DOTTED_LINE = PS_DOT, 点线 = 2DASHED_LINE = PS_DASHDOT, 点虚线 = 3NULL_LINE = PS_NULL, 不可见 = 5USERBIT_LINE = PS_USERSTYLE, 用户自定义 = 7
};
upattern, 自定义线型, 16位
当 linestyle 为 USERBIT_LINE时,这个参数生效,从低位到高位一次代表从开始到末尾方向的每16个像素是否填充, 1代表填充 ,0代表不填充。thickness, 线宽
5. 设置当前绘画线宽
thickness 是浮点型,线的宽度, 单位是像素,可以很大。
void setlinewidth(float thickness, PIMAGE pimg = NULL);
6. 绘图位操作模式
绘图默认使用当前颜色来进行绘制,但是可以设置使用其它颜色,比如黑色,白色,窗口颜色和当前颜色的混合。
void setwritemode(int mode, PIMAGE pimg = NULL);
这个mode是需要固定的值传入(二元光栅操作码),具体请查看库函数文档,也可以看EGE光栅操作一章
二、绘图目标:PIMAGE参数
我们绘图时经常省略PIMAGE参数,此时默认是绘制到窗口上,也可以设置为默认绘制到其它 IMAGE 图像上。
1. 设置当前绘图目标
void settarget(PIMAGE pbuf = NULL);
pbuf
:绘图对象,为PIMAGE类型,你要绘画到的PIMAGE,如果不填,则默认为窗口。
2. 获取当前绘图对象。
PIMAGE gettarget();
三、图形的绘制
EGE部分绘图函数
http://xege.org/manual/api/draw/index.htm
很多函数都有PIMAGE 参数, 这个是指向IMAGE对象的指针,默认值为NULL,即默认直接绘制到窗口。
1. 普通绘图函数
1.1 普通绘图函数带有锯齿
画出的图形可以看到线条会有锯齿,不是很美观,所以如果想要美观,可以使用 高级绘图函数
1.2 普通绘图函数使用的是RGB颜色
接下来说的是普通绘图函数,和后面的高级绘图函数区别开来。
普通绘图函数使用RGB颜色,ARGB颜色中的透明度对于普通绘图来说是无效的(高级绘图函数则可以使用透明度)。设置ARGB颜色无法调整图形的透明度,对于透明度不为0的ARGB颜色,普通绘图函数绘制出的图形有可能会变成黑色(只有一些特殊的Alpha值会),如果出现这种情况,设置一下透明度为0即可。
图形的颜色是由前景色和填充颜色指定, setcolor() 设置前景色, setfillcolor() 设置填充颜色。设置颜色后,颜色就一直有效,直到下次设置。
2. 绘图函数目录
绘图函数请查看官网的库函数绘图函数文档,下面只挑几个说明一下
2.1 绘图预览
2.2 绘图函数文档
函数的使用请查阅库函数目录
http://xege.org/manual/api/draw/index.htm
2.3 补充:填充圆
有部分初学者不知道填充圆怎么画,所以做个补充
就像正方形是长和宽相等的矩形一样,圆是长短半轴相等的椭圆,是椭圆的一个特例,所以使用填充椭圆绘图函数即可,长短半轴参数相等即可。
fillellipse(x, y, radius, radius); //长短半径
如果需要,可以封装成 fillcircle()
void fillcircle(int x, int y, int radius)
{fillellipse(x, y, radius, radius);
}
更多普通绘图函数请参考官网文档
3. 区域颜色填充
如果已经绘制了线框或多个图形组成了封闭图形,可以自己手动给这些区域填充颜色。
填充先设置填充颜色
void setfillcolor(color_t color, PIMAGE pimg = NULL);
3.1 指定边界色填充(floodfill)
floodfill
: 填充封闭图形内部,边界由borderColor指定,内部点为(x, y)。填充的颜色由 setfillcolor() 指定。
函数声明:
void floodfill(int x, int y, int borderColor, PIMAGE pimg = NULL);
如下图所示,想要将下面的圆内部涂成浅蓝色
- 先要找到圆内部的一个点位置(在内部就行,不能在边界处)
- 确定边界的颜色,下面圆的边界颜色是红色,然后调用即可。
原理是从目标位置开始,把周围不是边界颜色的像素都改成填充颜色,直至扩充到每一个点上下左右都是边界,所以边界颜色一定要能够封闭(八连通),不然会填充到外部。
下面就是边界颜色不封闭的结果
3.2 指定区域色填充(floodfillsurface)
floodfillsurface
: 将areacolor颜色的色块填充,x, y为色块内的某个点 。
函数声明:
void floodfillsurface(int x, int y, int areacolor, PIMAGE pimg = NULL);
如下图,想要将黄色色块涂成紫色, 先要找到色块内部的一个点(x, y), 然后确定色块的颜色值areacolor, 然后调用函数就可以了。
原理是从目标位置开始,把周围颜色是areacolor的像素都改成填充颜色。这个和windows画图工具里油漆桶的作用是一样的。
填充前:
填充后:
EGE专栏:EGE专栏
EGE基础:基础绘图篇相关推荐
- EGE基础:高级绘图篇
EGE专栏:EGE专栏 目录 一. EGE中的高级绘图函数 1. 高级绘图函数相比普通绘图函数的优势 1.1 图形边缘更为光滑 1.2 图形具有透明度 二. 高级函数的使用设置 1. 高级绘图函数设置 ...
- EGE图形库基础及使用方法
文章目录 一.前言 1.EGE简单介绍 2.EGE官方基础教程 3.demo 4.技术分享 5. 安装问题 二.简单试玩 三.官方手册 一.前言 1.EGE简单介绍 EGE(Easy Graphics ...
- python turtle基本语法_Python 基础语法-turtle篇
Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- 算法之基础数论应用篇(一)
基础数论应用篇 子集和 题目描述 筛质数 筛质数模板 欧拉筛 线性筛 哥德巴赫猜想 夏洛克和他的女朋友 二次筛法 分解质因数 试除法分解质因数 分解阶乘质因子 快速幂 模板 快速幂 快速乘法 序列的第 ...
- 高校计算机基础能力测试文字处理,高校计算机基础论文3篇(共8238字).doc
高校计算机基础论文3篇(共8238字) 高校计算机基础论文3篇(共8238字) 第一篇:高校计算机基础课程实践教学 一.面向应用的计算机基础课程实践教学模式的构建 为实现计算机基础课程教学的培养目标, ...
- IOS开发基础之绘图的样式
IOS开发基础之绘图的样式 // LJView.m // 33-绘图的样式 // Created by 鲁军 on 2021/2/23. #import "LJView.h" @i ...
- IOS基础之绘图函数的使用
IOS基础之绘图函数的使用 // // HMView.m // 25-绘图步骤 // // Created by 鲁军 on 2021/2/14. //#import "HMView.h&q ...
- JavaScript 基础知识 - BOM篇
前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...
- .NET 并行(多核)编程系列之六 Task基础部分完结篇
.NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...
最新文章
- extjs5的grid垂直滚动条bug_Extjs grid panel 滚动条失效的解决方法
- 问题 E: 括号规则
- TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'的解决方法等
- 第6次cplus实验
- zabbix mysql复制延迟_mysql 主从复制延迟监控
- 服务器查看日志桌面版工具,系统日志查看工具(LogFusion Pro)
- STM32F103使用DAC功能输出正弦波
- 同样是软件测试工程师,为什么性能测试月薪更高?
- iOS xcode4 编译环境
- [转] 拆开表皮看心脏:主流网游引擎面面观
- 2021五一数学建模ABC思路
- linux基本命令学习
- Android 实现沉浸式体验
- 【linux内核分析与应用-陈莉君】中断处理机制
- 浅析汽车芯片信息安全之安全启动
- webpack打包压缩混淆_前端打包利器:webpack工具
- RenderTexture 橡皮檫 电筒效果
- 又一打脸现场!Fork Bunny 的 Merlin 损失 240 ETH
- 星巴克猫爪杯开售遭哄抢 淘宝同款比比皆是真假难辨
- 123部奥斯卡影片名称中英文对照