(七)基础绘图

两盒软妹~` 提交于 2020-02-16 16:49:04

基础绘图

画笔设置

设置当前绘画颜色

void setcolor(color_t color, PIMAGE pimg = NULL);

设置填充颜色

void setfillcolor(color_t color, PIMAGE pimg = NULL);

设置当前绘画线型

可以设置实线,虚线,点线等,还可以设置线宽

void setlinestyle(int linestyle, WORD upattern = NULL, int thickness = 1, PIMAGE pimg = NULL);

参数说明:setlinestyle( 线型, 自定义线性, 线宽, 绘制的目标)

当线宽不为1时,画出来都会是实线,所以设置线宽不为1时线型失效,库的问题

  • linestyle, 线型
    linestyle只能从多个枚举中选择
enum line_styles {							线型注释
	SOLID_LINE      = PS_SOLID,				实线 = 0
	CENTER_LINE     = PS_DASH,				虚线 = 1
	DOTTED_LINE     = PS_DOT,				点线 = 2
	DASHED_LINE     = PS_DASHDOT,			点虚线 = 3
	NULL_LINE       = PS_NULL,				不可见 = 5
	USERBIT_LINE    = PS_USERSTYLE,			用户自定义 = 7
};
  • upattern, 自定义线型, 16位
    linestyleUSERBIT_LINE时,这个参数生效,从低位到高位一次代表从开始到末尾方向的每16个像素是否填充, 1代表填充 ,0代表不填充。

  • thickness, 线宽,与线型冲突, 大于1时线型失效

设置当前绘画线宽

thickness 是浮点型,线的宽度, 单位是像素,可以很大

void setlinewidth(float thickness, PIMAGE pimg = NULL);

这个需要注意,这个设置线宽函数只有在调用后调用一次 setcolor() 才会生效。

setlinewidth(thickness);
setcolor(color)

绘图位操作模式

  绘图默认使用当前颜色来进行绘制,但是可以设置使用其它颜色,比如黑色,白色,窗口颜色和当前颜色的混合。
  setwritemode()

绘图目标

  • 我们绘图时经常省略PIMAGE参数,此时默认是绘制到窗口上,也可以设置为默认绘制到其它窗口上。
  • 设置当前绘图对象。
    pbuf
    绘图对象,为PIMAGE类型,你要绘画到的PIMAGE,如果不填,则还原为窗口
void settarget(PIMAGE pbuf = NULL);
  • 获取当前绘图对象。
PIMAGE gettarget();

图形的绘制

  EGE部分绘图函数
  http://xege.org/manual/api/draw/index.htm

很多函数都有PIMAGE 参数, 这个是指向IMAGE对象的指针,默认值为NULL,即直接绘制到窗口中。

(1) 普通绘图函数

普通绘图函数带有锯齿

  画出的图形可以看到线条会有锯齿,不是很美观,所以如果想要美观,可以使用高级绘图函数

普通绘图函数使用的是RGB颜色

  • 接下来说的是普通绘图函数,和后面的高级绘图函数区别开来。
  • 普通绘图函数使用RGB颜色,ARGB颜色中的透明度对于普通绘图来说是无效的(高级绘图函数则可以使用透明度),不能调整透明度,所以不能把颜色设置为ARGB颜色,否则很有可能颜色会变成黑色(有些不会)
  • 图形的颜色是由前景色和填充颜色指定, setcolor()设置前景色, setfillcolor()设置填充颜色,设置颜色后,颜色就一直有效,直到下次设置。

绘图函数

绘图函数请查看官网的库函数绘图函数文档,下面只挑几个说明一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数的使用请查阅库函数目录

  http://xege.org/manual/api/draw/index.htm
在这里插入图片描述

像素点
	void putpixel(int x, int y, color_t color, PIMAGE pimg = NULL);
多个像素点
void putpixels(int nPoint, int* pPoints, PIMAGE pimg = NULL);

  参数
  nPoint:点的数目。
  pPoints: 指向点的描述的指针,一个int型的数组,依次每三个int描述一个点:第一个为x坐标,第二个为y坐标,第三个为颜色值。

这个需要注意,如果要使用绘制多个点的 putpixels() 或 putpixels_f(), 由源码可知,用的是BGR 颜色**(原因不清楚)**,可以使用 RGBTOBGR() 进行转换

如,绘制4个点, 每个点需要用三个int, 那么四个点就是4 * 3 个int.

int nPoint = 4;
int points[4 * 3] = {
	100, 100, RGBTOBGR(EGERGB(0XFF, 0, 0)),
	101, 100, RGBTOBGR(EGERGB(0XFF, 0, 0)),
	100, 101, RGBTOBGR(EGERGB(0XFF, 0, 0)),
	101, 101, RGBTOBGR(EGERGB(0XFF, 0, 0)),
};
putpixels(nPoint, points);
线

  画一条 从(x1, y1)到(x2, y2)的线。

void line(int x1, int y1, int x2, int y2, PIMAGE pimg = NULL);

从当前点到目标点画一条直线, 当前点由 moveto(x, y) 指定, 也可以使用 moverel(dx, dy) 作相对位置移动。

void lineto(int x, int y, PIMAGE pimg = NULL);

从当前点画一条到相对位置的直线。

void linerel(int dx, int dy, PIMAGE pimg = NULL);
圆(线框, 内部无填充):
	void circle(int x, int y, int radius, PIMAGE pimg = NULL)

  x, y, 圆中心坐标, radius, 圆半径
  示例:circle(320, 240, 100); //圆心在(320, 240)的半径为100的圆

填充椭圆(内部带颜色)
void fillellipse(int x, int y, int xradius, int yradius,PIMAGE pimg = NULL);

  x, y 椭圆中心坐标
  xradius, yradius, 两个半轴的长度, 相等即为一个圆的半径。
  使用示例:fillellipse(320, 240, 100, 100); //圆心在(320, 240)的半径为100的填充圆。

填充圆

椭圆长短半轴相等就是圆了。所以使用 **fillellipse(x, y, radius, radius)**即可

更多普通绘图函数请参考官网文档

如何画圆?内部有颜色的那种

使用填充椭圆 fillellipse( )长短半轴相等的椭圆就是圆

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!