EasyX之绘图
一、准备
下载EasyX_20220901.exe,点击运行安装即可,这个好像还没有vs2022安装选项。
#include <graphics.h>
二、loadimage
(一)参数解释
void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false);
// Load image from a file (bmp/gif/jpg/png/tif/emf/wmf/ico)
1. IMAGE* img 图像对象,由于是指针,实际使用时参数前必须加上取址符&(见举例)。在使用loadimage()前,需要使用class IMAGE 声明一个图像对象, 这个对象可以在声明时定义大小,例如:IMAGE img(100,100);但一般不在声明时定义大小,只声明对象名称即可,例如 MAGE img。
2.LPCTSTR pImgFile 图像所在目录及文件名,用双引号引起来。如使用的是UNICODE字符集,在 "***" 前加上L,否则报错。或者选用多字符集也可。图像最好存放到程序所在目录,简单。
3.int nWidth , int nHeight 两个整形数字,图片的拉伸宽度和高度。0,0--将图片按原大小装入,显示时可能仅显示图片一角,不建议采用。m,n--两个不等于0但分别小于窗口长宽的整数,【若希望满窗口显示时参数选用:getwidth(),getheight()】。这里存在一个问题,即窗口长宽与原图长宽不一致时,图片会产生扭曲。最好提前将图片裁剪成准备显示的长宽比例。
4.bool bResize 一个布尔值,选0或1是否对显示结果产生影响,取决于声明图像时是否定义图像的大小, 如未定义,0或1显示结果都相同;如定义了,0则不能重新定义大小(即第3.中的长宽设置无效),1可以重新定义。
5.补充:如声明图像对象时,直接声明成指针对象(IMAGE* img),在loadimage()中不加取址符,写代码时不报错,运行时会陷入死循环。
(二)应用例子
IMAGE im_bk; // 定义图像对象 loadimage(&im_bk, _T("11.jpg"), WIDTH, HEIGHT); // 导入背景图片
三、initgraph
(一)参数解释
HWND initgraph(int width, int height, int flag = 0); // Create graphics window
参数:
width 绘图环境的宽度。height 绘图环境的高度。
flag 绘图环境的样式,默认为 NULL。可为以下值:
值 | 含义 |
---|---|
NOCLOSE | 禁用绘图环境的关闭按钮。 |
NOMINIMIZE | 禁用绘图环境的最小化按钮。 |
SHOWCONSOLE | 保留原控制台窗口。 |
返回值:创建的绘图窗口的句柄。
(二)应用例子
以下局部代码创建一个尺寸为 640x480 的绘图环境:
initgraph(640, 480);
以下局部代码创建一个尺寸为 640x480 的绘图环境,同时显示控制台窗口:
initgraph(640, 480, SHOWCONSOLE);
以下局部代码创建一个尺寸为 640x480 的绘图环境,同时显示控制台窗口,并禁用关闭按钮:
initgraph(640, 480, SHOWCONSOLE | NOCLOSE);
(三)注意
新开画面的画面,左上角为(0,0)
if (_kbhit()) // 如果按键 { char input = _getch(); // 获取按键 if (input == 'a') // 向左 player.x_left -= player.vx; if (input == 'd') // 向右 player.x_left += player.vx; if (input == 'w') // 向上 player.y_bottom -= player.vy; if (input == 's') // 向下 player.y_bottom += player.vy; }
四、putimage
(一)参数解释
void putimage(int dstX, int dstY, const IMAGE *pSrcImg, DWORD dwRop = SRCCOPY); // Put image to device
int dstX, int dstY图片加载的位置,X轴,Y轴坐标,为输出屏幕图像的左上角,即输出图像的起始位置。
const IMAGE *pSrcImg要绘制的IMAGE对象指针
DWORD dwRop = SRCCOPY三元光栅操作码
(二)应用例子
putimage(0, 0, &im_bk); // 显示背景图片
五、_getch
_getch()函数在conio.h头文件定义。
_getch()函数的作用是从控制台中获取输入的字符,在获取输入的字符之后,并不会在控制台中显示该字符。
_getch() 函数读入一个字符时 不用 enter 代码就会继续跑。_getch()函数是一个阻塞函数,直到有字符输入时才会返回,所以该函数不会返回错误值。
六、完整代码
IMAGE im_bk; // 定义图像对象 loadimage(&im_bk, _T("11.jpg"), WIDTH, HEIGHT); // 导入背景图片 initgraph(WIDTH, HEIGHT); // 新开一个画面 putimage(0, 0, &im_bk); // 显示背景图片,表示在画面坐标(0,0)处显示im_bk图片,也就是从画面最左上角显示出了完整的背景图片。 _getch();
这个就可以画一个背景了
七、BeginBatchDraw
(一)解释
void BeginBatchDraw(); // Begin batch drawing mode
BeginBatchDraw用于开始批量绘图。执行后,任何绘图操作都将暂时不输出到绘图窗口上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。