EasyX之绘图

一、准备

https://easyx.cn/

下载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 才将之前的绘图输出。

posted @ 2022-11-14 16:41  ImreW  阅读(199)  评论(0编辑  收藏  举报