下载最新版:EasyX官网

PS :Dev C++可能检测不到,建议使用Visual Studio Community2019,

VS官网下载:https://visualstudio.microsoft.com/zh-hans/free-developer-offers/


目录

一、基础

1.绘图环境

(1)initgraph

(2)closegraph

2.颜色

(1)颜色常量

(2)setcolor

(3)setlinecolor

(4)settextcolor

(5)setbkcolor

(6)setfillcolor

3.样式

(1)setbkmode

(2)setlinestyle

4.图形

(1)circle

(2)fillcircle

(3)solidcircle

(4)line

(5)putpixel

5.刷屏

(1)BeginBatchDraw

(2)FlushBatchDraw

(3)EndBatchDraw

(4)分析FlushBatchDraw的位置

6.图像

(1)IMAGE

(2)loadimage

(3)putimage

7.清屏

(1)cleardevice

(2)clearrectangle

8.输出字符串

(1)outtextxy

二、例子

1.画十条平行直线

2.以线绘制渐变色窗口

3.用红蓝色交替画线

4.动画效果

(1)只有小球的代码:

(2)复杂绘图代码:

5.反弹的小球

6.时钟

7.雷霆战机

8.更多例子见EasyX官网


一、基础

头文件:#include<graphics.h>

1.绘图环境

(1)initgraph

初始化绘图环境

原型:

HWND initgraph(int width, //绘图环境的宽度int height, //绘图环境的高度int flag = NULL);

参数:

  • flag
    绘图环境的样式,默认为 NULL。值为 SHOWCONSOLE 则保留原控制台窗口.

(2)closegraph

void closegraph();
//关闭绘图环境

2.颜色

(1)颜色常量

RGB方式

setcolor(RGB(0,0,0));

字母方式

setcolor(BLACK);

六个十六进制

setcolor(0x000000);

每两位十六进制分别对应,蓝色,绿色,红色。

Link:RGB颜色对应表,想要的颜色自己去查一下。

一些常见的颜色:

  • 0x000000 黑色
  • 0xFF0000 (深)蓝色
  • 0xFFAAAA (浅)蓝色
  • 0xFFFFFF 白色

(2)setcolor

设置前景颜色(字体颜色和线条颜色),等效于连续执行 easyx.h 中的 setlinecolor 和 settextcolor 函数。

void setcolor(COLORREF color);

(3)setlinecolor

这个函数用于设置当前画线颜色。

void setlinecolor(COLORREF color);

(4)settextcolor

这个函数用于设置当前文字颜色。

void settextcolor(COLORREF color);

(5)setbkcolor

设置当前绘图背景色。

void setbkcolor(COLORREF color);

执行 cleardevice() 或 clearcliprgn() 等清除函数时,使用该颜色清空屏幕或裁剪区。

(6)setfillcolor

void setfillcolor(COLORREF color);

设置当前填充颜色。

3.样式

(1)setbkmode

设置图案填充和文字输出时的背景模式

void setbkmode(int mode);

参数:mode

  • OPAQUE 不透明的,背景用当前背景色填充(默认)。
  • TRANSPARENT 背景是透明的。

(2)setlinestyle

设置当前画线样式。

原型1:

void setlinestyle(const LINESTYLE* pstyle);
  • pstyle
    指向画线样式 LINESTYLE 的指针。

原型2:

void setlinestyle(int style,int thickness = 1,const DWORD *puserstyle = NULL,DWORD userstylecount = 0);
  • style

    画线样式,由直线样式、端点样式、连接样式三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。

    【直线样式可以是以下值】

    【端点样式可以是以下值】

    【连接样式可以是以下值】

  • thickness
    线的宽度,以像素为单位。
  • puserstyle
    用户自定义样式数组,仅当线型为 PS_USERSTYLE 时该参数有效。
    数组第一个元素指定画线的长度,第二个元素指定空白的长度,第三个元素指定画线的长度,第四个元素指定空白的长度,以此类推。
  • userstylecount
    用户自定义样式数组的元素数量。
  • 返回值:
    (无)

示例:

以下局部代码设置画线样式为点划线:

setlinestyle(PS_DASHDOT);

以下局部代码设置画线样式为宽度 3 像素的虚线,端点为平坦的:

setlinestyle(PS_DASH | PS_ENDCAP_FLAT, 3);

以下局部代码设置画线样式为宽度 10 像素的实线,连接处为斜面:

setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 10);

以下局部代码设置画线样式为自定义样式(画 5 个像素,跳过 2 个像素,画 3 个像素,跳过 1 个像素……),端点为平坦的:

DWORD a[4] = {5, 2, 3, 1};
setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 1, a, 4);

4.图形

(1)circle

画一个圆,准确地说,是一个圆形边框。

void circle(int x, //圆的圆心 x 坐标。int y, //圆的圆心 y 坐标。int radius //圆的半径。);

(2)fillcircle

画填充圆(有边框)。使用当前线形和当前填充样式

void fillcircle(int x,int y,int radius);

(3)solidcircle

这个函数用于画填充圆(无边框)。使用当前填充样式绘制

void solidcircle(int x,int y,int radius);

(4)line

这个函数用于画直线。

void line(int x1, //直线的起始点的 x 坐标。int y1, //直线的起始点的 y 坐标。int x2, //直线的终止点的 x 坐标。int y2 //直线的终止点的 y 坐标。);

(5)putpixel

这个函数用于画点。

void putpixel(int x,         //点的 x 坐标。int y,         //点的 y 坐标。COLORREF color //点的颜色。);

5.刷屏

(1)BeginBatchDraw

这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出到屏幕上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。

用在循环外面,如例5

void BeginBatchDraw();

(2)FlushBatchDraw

这个函数用于执行未完成的绘制任务。

用在绘图中间。

void FlushBatchDraw();

(3)EndBatchDraw

这个函数用于结束批量绘制,并执行未完成的绘制任务。

void EndBatchDraw();

(4)分析FlushBatchDraw的位置

如例5,函数放在两次绘图中间而不是两次绘图的最下面,因为闪烁是蓝色小球没有被绘制出来,而不是黑色小球没有绘制。所以只要保证绘制出绿色小球,而在函数最贴近上面的绘制是一定能绘制的。如果用在两次绘图的最下面,如下面,再加个Sleep函数控制速度,结果就是什么都没有。因为绿色闪几毫秒就没了。

BeginBatchDraw();while (1){setcolor(GREEN);setfillcolor(BLUE);fillcircle(ball_x, ball_y, radius);Sleep(5);setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball_x, ball_y, radius);FlushBatchDraw();ball_x += ball_vx;ball_y += ball_vy;if(ball_x <= radius || ball_x >= Width - radius)ball_vx = -ball_vx;if (ball_y <= radius || ball_y >= Height - radius)ball_vy = -ball_vy;
}EndBatchDraw();

6.图像

(1)IMAGE

实现 IMAGE 对象的直接赋值

class IMAGE(int width = 0, int height = 0);

公有成员:

  • int getwidth();
    返回 IMAGE 对象的宽度,以像素为单位。
  • int getheight();
    返回 IMAGE 对象的高度,以像素为单位。

示例:

以下局部代码创建 img1、img2 两个对象,之后加载图片 test.jpg 到 img1,并通过赋值操作将 img1 的内容拷贝到 img2:

IMAGE img1, img2;
loadimage(&img1, _T("test.jpg"));
img2 = img1;以下局部代码创建 img 对象,之后加载图片 test.jpg,并将图片的宽高赋值给变量 w、h:IMAGE img;
loadimage(&img, _T("test.jpg"));
int w, h;
w = img.getwidth();
h = img.getheight();

(2)loadimage

这个函数用于从文件中读取图像。

// 从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)void loadimage(IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针LPCTSTR pImgFile, // 图片文件名int nWidth = 0, // 图片的拉伸宽度int nHeight = 0, // 图片的拉伸高度bool bResize = false // 是否调整 IMAGE 的大小以适应图片);
// 从资源文件获取图像(bmp/jpg/gif/emf/wmf/ico)void loadimage(IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针LPCTSTR pResType, // 资源类型LPCTSTR pResName, // 资源名称int nWidth = 0, // 图片的拉伸宽度int nHeight = 0, // 图片的拉伸高度bool bResize = false // 是否调整 IMAGE 的大小以适应图片);

参数:

  • pDstImg
    保存图像的 IMAGE 对象指针。如果为 NULL,表示图片将读取至绘图窗口。
  • pImgFile
    图片文件名。支持 bmp / jpg / gif / emf / wmf / ico 类型的图片。gif 类型的图片仅加载第一帧,不支持透明。
  • nWidth
    图片的拉伸宽度。加载图片后,会拉伸至该宽度。如果为 0,表示使用原图的宽度。
  • nHeight
    图片的拉伸高度。加载图片后,会拉伸至该高度。如果为 0,表示使用原图的高度。
  • bResize
    是否调整 IMAGE 的大小以适应图片。
  • pResType
    图片资源类型。
  • pResName
    图片资源名称。

(3)putimage

这个函数的几个重载用于在当前设备上绘制指定图像。

// 绘制图像void putimage(int dstX,              // 绘制位置的 x 坐标int dstY,              // 绘制位置的 y 坐标IMAGE *pSrcImg,        // 要绘制的 IMAGE 对象指针DWORD dwRop = SRCCOPY  // 三元光栅操作码(详见备注));

备注:

三元光栅操作码(即位操作模式),支持全部的 256 种三元光栅操作码,常用的几种如下:

注:

1. AND / OR / NOT / XOR 为布尔运算。

2. "屏幕颜色"指绘制所经过的屏幕像素点的颜色。

3. "图像颜色"是指通过 IMAGE 对象中的图像的颜色。

4. "当前填充颜色"是指通过 setfillcolor 设置的用于当前填充的颜色。

7.清屏

(1)cleardevice

这个函数用于清除屏幕内容。具体的,是用当前背景色清空屏幕,并将当前点移至 (0, 0)。

void cleardevice();

(2)clearrectangle

这个函数用于清空矩形区域

void clearrectangle(int left, //矩形左部 x 坐标。int top, //矩形上部 y 坐标。int right, //矩形右部 x 坐标。int bottom //矩形下部 y 坐标。);

8.输出字符串

(1)outtextxy

这个函数用于在指定位置输出字符串。

void outtextxy(int x, //字符串输出时头字母的 x 轴的坐标值int y, //字符串输出时头字母的 y 轴的坐标值LPCTSTR str);
void outtextxy(int x,int y,TCHAR c);

例子:如何使用LPCTSTR str和TCHAR c

TCHAR s[100];_stprintf(s, _T("你的分数:%d"), kill);outtextxy((WINDOW_WIDTH / 2 + WIDTH / 2) + 50, WINDOW_HEIGHT/2, s);

二、例子

1.画十条平行直线

#include <stdio.h>
#include <graphics.h>int main()
{// 初始化窗口initgraph(640, 480);for (int y = 0; y <= 480; y += 48){// 画线line(0, y, 640, y);}// 暂停窗口,不让其退出getchar();// 关闭窗口closegraph();return 0;
}

2.以线绘制渐变色窗口

#include <stdio.h>
#include <graphics.h>int main()
{initgraph(640, 480);for (int y = 0; y <= 480; y++){setcolor(RGB(0, 0, y / 2));line(0, y, 640, y);}getchar();closegraph();return 0;
}

3.用红蓝色交替画线

#include <stdio.h>
#include <graphics.h>int main()
{initgraph(640, 480);for (int y = 0; y <= 480; y += 48){if ((y / 48) % 2 == 1)setcolor(RGB(255, 0, 0));elsesetcolor(RGB(0, 0, 255));line(0, y, 640, y);}getchar();closegraph();return 0;
}

4.动画效果

(1)只有小球的代码:

#include <stdio.h>
#include <graphics.h>int main()
{initgraph(640, 480);setfillcolor(BLUE);for (int y = 0; y <= 480; y += 10){fillcircle(100, y, 25);Sleep(100);cleardevice();}getchar();closegraph();return 0;
}

(2)复杂绘图代码:

#include <stdio.h>
#include <graphics.h>int main()
{initgraph(640, 480);for (int y = 0; y <= 480; y += 10){setcolor(GREEN);setfillcolor(BLUE);fillcircle(100, y, 25);Sleep(100);/** * 下面的意思是将绘制出来的圆在显示100毫秒后,将其用背景色覆盖掉* 这样就达到了清除了操作* 为什么不用cleardevice(),因为会将整个屏幕清空,而我们还想保留其他的画面呢*/setcolor(BLACK);        //不仅填充色要求是黑色,而且边框色要得改变,默认白色setfillcolor(BLACK);fillcircle(100, y, 25);}getchar();closegraph();return 0;
}

5.反弹的小球

#include <graphics.h>
#include <conio.h>#define Width 640
#define Height 480
int main()
{// 初始化绘图窗口initgraph(640, 480);double ball_x=100, ball_y=100;double ball_vx=1, ball_vy=1;double radius=25;BeginBatchDraw();while (1){setcolor(GREEN);setfillcolor(BLUE);fillcircle(ball_x, ball_y, radius);Sleep(5);FlushBatchDraw();setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball_x, ball_y, radius);ball_x += ball_vx;ball_y += ball_vy;if (ball_x <= radius || ball_x >= Width - radius)ball_vx = -ball_vx;if (ball_y <= radius || ball_y >= Height - radius)ball_vy = -ball_vy;}EndBatchDraw();// 另一种不让控制台退出的暂停方式system("pause");closegraph();return 0;
}

6.时钟

#include <graphics.h>
#include <conio.h>
#include <math.h>#define Width 640
#define Height 480
#define PI 3.14159int main()
{// 初始化绘图窗口initgraph(640, 480, SHOWCONSOLE);//秒针起始坐标int center_x = Width / 2, center_y = Height / 2;//秒针终点坐标int secondEnd_x, secondEnd_y;//分针终点坐标int minuteEnd_x, minuteEnd_y;//时针终点坐标int hourEnd_x, hourEnd_y;//秒针长度int secondLength = Width / 4;//分针长度int minuteLength = Width / 5.5;//时针长度int hourLength = Width / 7;//秒针对应转到角度float secondAngle = 0;//分针对应转到角度float minuteAngle = 0;//时针对应转到角度float hourAngle = 0;//定义变量存储系统时间SYSTEMTIME ti;BeginBatchDraw();while (1){setfillcolor(YELLOW);setlinestyle(PS_DASHDOTDOT, 5);setlinecolor(0x555555);circle(center_x, center_y, secondLength + 30);setcolor(0xAAAAAA);setlinestyle(PS_DOT | PS_ENDCAP_SQUARE, 2);circle(center_x, center_y, secondLength + 15);for (int i = 0; i < 12; i++){int x = center_x + cos(i * 30.0 / 360 * 2 * PI) * (secondLength + 15.0);int y = center_y - sin(i * 30.0 / 360 * 2 * PI) * (secondLength + 15.0);fillcircle(x , y , 5);}GetLocalTime(&ti);secondAngle  = (ti.wSecond / 60.0) * (2 * PI);minuteAngle   = (ti.wMinute / 60.0) * (2 * PI);hourAngle = ((ti.wHour % 12) / 12.0) * (2 * PI) + (ti.wMinute / 60.0) * (2 * PI / 12.0);secondEnd_x = center_x + secondLength * sin(secondAngle);secondEnd_y = center_y - secondLength * cos(secondAngle);minuteEnd_x = center_x + minuteLength * sin(minuteAngle);minuteEnd_y = center_y - minuteLength * cos(minuteAngle);hourEnd_x = center_x + hourLength * sin(hourAngle);hourEnd_y = center_y - hourLength * cos(hourAngle);//画秒针setlinestyle(PS_SOLID, 1);setcolor(WHITE);line(center_x, center_y, secondEnd_x, secondEnd_y);//画分针setlinestyle(PS_SOLID, 2);setcolor(GREEN);line(center_x, center_y, minuteEnd_x, minuteEnd_y);//画时针setlinestyle(PS_SOLID, 5);setcolor(RED);line(center_x, center_y, hourEnd_x, hourEnd_y);FlushBatchDraw();        setlinestyle(PS_SOLID, 1);setcolor(BLACK);line(center_x, center_y, secondEnd_x, secondEnd_y);setlinestyle(PS_SOLID, 2);setcolor(BLACK);line(center_x, center_y, minuteEnd_x, minuteEnd_y);setlinestyle(PS_SOLID, 5);setcolor(BLACK);line(center_x, center_y, hourEnd_x, hourEnd_y);}EndBatchDraw();system("pause");closegraph();return 0;
}

7.雷霆战机

https://blog.csdn.net/sandalphon4869/article/details/80861915

8.更多例子见EasyX官网

https://www.codebus.cn/

EasyX库使用入门相关推荐

  1. EasyX库入门学习

    EasyX库入门学习 文章目录 EasyX库入门学习 1.EasyX的基本说明 2.EasyX的安装 3.EasyX的使用 1) 三个基本概念:颜色,坐标,设备 2) 绘制环境 3) 个人示例程序 4 ...

  2. 【Easyx库基础用法教程】

    Easyx图像库 @[TOC](Easyx图像库) 1.1简单介绍 1.2Easyx原理 2.Easyx基础知识 2.1Easyx颜色 2.2Easyx坐标和设备 3.Easyx图形编程----窗口函 ...

  3. easy-x库graphics.h图形库安装

    easy-x库graphics.h图形库安装 graphics.h就是C++下easy-x库的一个图形库,还蛮好玩的,你想用vc6.0还是VS都是需要自己安装这个库的,接下来就来看着怎么安装吧! 一. ...

  4. python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作

    pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...

  5. freebasic 编译linux,FreeBasic库文件入门 [SJ ZERO原创,沧海冷心翻译]

    FreeBasic库文件入门 [SJ ZERO原创,沧海冷心翻译] http://www.freebasic.cn FreeBasic最大的优势就是可以与标准C的类库无缝结合.在FREEBASIC拥有 ...

  6. MySQL---数据库基础入门

    MySQL---数据库基础入门 作者:qq_26525215 从最开始的创建数据库,创建表,创建列开始写起,再到常用的EXISTS函数,SELECT 复杂查询,模糊查询LIKE,创建视图 等深入学习. ...

  7. VS2019c++配置GDAL和HDF库新手入门

    VS2019c++配置GDAL和HDF库新手入门 1.准备 下载 2.编译和安装 2.1编译SQLite 2.2编译PROJ 2.3安装 编译GDAL 2.4编译GEOS库 2.5集成GEOS+HDF ...

  8. C语言书写推箱子(坤坤版easyx库)

    C语言书写推箱子(坤坤版easyx库) 游戏效果的展示 运用的知识点(必看) 代码的讲解 游戏地图的实现 地图的初始化 地图图片的加载 地图图片的放置 人物和箱子的移动(重点) 游戏结束的判断 音乐的 ...

  9. easyx库的介绍与使用

    easyx库的介绍与使用 简单介绍 下载安装 注意事项 1.创建一个窗口(initgraph) 2.图形绘制 画圆(circle,solidcircle) 画线条(line) 画矩形(rectangl ...

最新文章

  1. Elam的git笔记:(二)git的安装与基本操作介绍
  2. 在DevExpress中使用CameraControl控件进行摄像头图像采集
  3. webservice 存根方式
  4. POJ2976——Dropping tests(0/1分数规划)
  5. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
  6. java多态替换switch_第1章 重构,第一个案例(3):运用多态取代switch
  7. java怎么设置不同事件_activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便...
  8. c语言之判断电压最大值最小值,基于单片机的频率计的C语言源代码
  9. Leetcode--33. 搜索旋转排序数组
  10. appium怎么操作物理返回键_这些Appium常用元素定位技巧,你掌握了几种?
  11. spring什么版本支持java8_升级spring4.1.6和支持java8
  12. Java中利用package机制实现条件编译
  13. MD(d)、MT(d)编译选项的区别
  14. android arcgis 添加地图,ArcGis for Android在地图上添加自定义图标
  15. 搜索的近义词php,挖掘关键词同义的近义词提高排名
  16. 我对国内两大购书站点的感受(dearbook和china-pub)
  17. count计时器java,倒计时器CountDownLatch
  18. 安卓实战之登录界面设计
  19. Pr 入门教程:如何减少音频中的噪音和混响?
  20. 数组和链表 Array and Linked-List

热门文章

  1. 用青龙跑渤海宣传员(收益很稳定)
  2. 高德地图截屏、标记鼠标跟随示例
  3. 收藏--真正爱你的男人
  4. 骆昊python100天 github_GitHub - zsfz/Python-100-Days: Python - 100天从新手到大师
  5. 虚拟化与元宇宙:人类文明演化的奇点与治理
  6. CSS实现鼠标悬停缩放
  7. 基于51单片机智能温控风扇设计PWM调速套件电子制作仿真
  8. 团队任务3每日立会(2018-10-24)
  9. CAD图纸怎么保存为PDF?几个步骤轻松掌握
  10. 奥迪Q5更换初装变速箱油教程