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位
    linestyleUSERBIT_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);

如下图所示,想要将下面的圆内部涂成浅蓝色

  1. 先要找到圆内部的一个点位置(在内部就行,不能在边界处)
  2. 确定边界的颜色,下面圆的边界颜色是红色,然后调用即可。

  原理是从目标位置开始,把周围不是边界颜色的像素都改成填充颜色,直至扩充到每一个点上下左右都是边界,所以边界颜色一定要能够封闭(八连通),不然会填充到外部。

  下面就是边界颜色不封闭的结果

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基础:基础绘图篇相关推荐

  1. EGE基础:高级绘图篇

    EGE专栏:EGE专栏 目录 一. EGE中的高级绘图函数 1. 高级绘图函数相比普通绘图函数的优势 1.1 图形边缘更为光滑 1.2 图形具有透明度 二. 高级函数的使用设置 1. 高级绘图函数设置 ...

  2. EGE图形库基础及使用方法

    文章目录 一.前言 1.EGE简单介绍 2.EGE官方基础教程 3.demo 4.技术分享 5. 安装问题 二.简单试玩 三.官方手册 一.前言 1.EGE简单介绍 EGE(Easy Graphics ...

  3. python turtle基本语法_Python 基础语法-turtle篇

    Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...

  4. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

  5. 算法之基础数论应用篇(一)

    基础数论应用篇 子集和 题目描述 筛质数 筛质数模板 欧拉筛 线性筛 哥德巴赫猜想 夏洛克和他的女朋友 二次筛法 分解质因数 试除法分解质因数 分解阶乘质因子 快速幂 模板 快速幂 快速乘法 序列的第 ...

  6. 高校计算机基础能力测试文字处理,高校计算机基础论文3篇(共8238字).doc

    高校计算机基础论文3篇(共8238字) 高校计算机基础论文3篇(共8238字) 第一篇:高校计算机基础课程实践教学 一.面向应用的计算机基础课程实践教学模式的构建 为实现计算机基础课程教学的培养目标, ...

  7. IOS开发基础之绘图的样式

    IOS开发基础之绘图的样式 // LJView.m // 33-绘图的样式 // Created by 鲁军 on 2021/2/23. #import "LJView.h" @i ...

  8. IOS基础之绘图函数的使用

    IOS基础之绘图函数的使用 // // HMView.m // 25-绘图步骤 // // Created by 鲁军 on 2021/2/14. //#import "HMView.h&q ...

  9. JavaScript 基础知识 - BOM篇

    前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...

  10. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...

最新文章

  1. extjs5的grid垂直滚动条bug_Extjs grid panel 滚动条失效的解决方法
  2. 问题 E: 括号规则
  3. TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'的解决方法等
  4. 第6次cplus实验
  5. zabbix mysql复制延迟_mysql 主从复制延迟监控
  6. 服务器查看日志桌面版工具,系统日志查看工具(LogFusion Pro)
  7. STM32F103使用DAC功能输出正弦波
  8. 同样是软件测试工程师,为什么性能测试月薪更高?
  9. iOS xcode4 编译环境
  10. [转] 拆开表皮看心脏:主流网游引擎面面观
  11. 2021五一数学建模ABC思路
  12. linux基本命令学习
  13. Android 实现沉浸式体验
  14. 【linux内核分析与应用-陈莉君】中断处理机制
  15. 浅析汽车芯片信息安全之安全启动
  16. webpack打包压缩混淆_前端打包利器:webpack工具
  17. RenderTexture 橡皮檫 电筒效果
  18. 又一打脸现场!Fork Bunny 的 Merlin 损失 240 ETH
  19. 星巴克猫爪杯开售遭哄抢 淘宝同款比比皆是真假难辨
  20. 123部奥斯卡影片名称中英文对照

热门文章

  1. 声智科技亮相小米新品发布会
  2. 我的世界基java版刷怪机制_我的世界刷怪上限范围解析 刷怪塔不刷怪原因
  3. js 获取设备或浏览器唯一标识的方式
  4. linux如何初始化根文件系统,搭建自己的Linux根文件系统
  5. Java、JSP研究生导师信息管理系统设计
  6. 中国定制家具市场营销态势与盈利前景预测报告(2022-2028年)
  7. 1.深入.NET框架
  8. 区块链-区块标识符:区块头哈希值和区块高度
  9. 安卓手机投屏软件_手机投屏软件哪个好?推荐这五款投屏神器
  10. 《人物动作:角色骨骼、蒙皮制作工艺》