专栏文章
EasyX 教程之基础篇
科技·工程参与者 6已保存评论 9
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mio6t6io
- 此快照首次捕获于
- 2025/12/02 14:18 3 个月前
- 此快照最后确认于
- 2025/12/02 14:18 3 个月前
这里是 EasyX 教程的基础篇,想看入门篇的点这里。由于最近事情较多,因此更新较慢,高阶篇预计于 个月后创作完成。话不多说,正篇开始!
插入图片
如果你想在 EasyX 界面中插入图片,那么就往下看吧!
先以下面的图片为例。

先把这张图片保存到一个你喜欢的位置,我把它放在了 D 盘上。现在我们把鼠标光标对准图片,按下右键,再点击复制文件地址,现在你就得到了这张图片的完整地址。
接下来问题来了,怎么把这张图片放到 EasyX 界面中呢?先看看代码。
CPP#include <bits/stdc++.h>
#include <easyx.h>
#include <graphics.h>
using namespace std;
int main()
{
initgraph(640, 480);
IMAGE ilw;//定义一个IMAGE类型的变量ilw。IMAGE类型用于存储图片
loadimage(&ilw, L"D:\\C++\\演示图片\\shop_bg.png", 640/*宽640像素*/, 480/*高480像素*/);//加载图片到ilw,&是用来取地址的,L"D:\\C++\\演示图片\\shop_bg.png"是图片地址,引号内的内容替换为你自己的图片地址,地址一定要完整,后面两项为缩放后的图片尺寸。
putimage(0/*图片左上角x坐标*/, 0/*图片左上角y坐标*/, &ilw);//显示图片,图片左上角x坐标为0,y坐标为0
Sleep(5000);
closegraph();
return 0;
}
不难发现,使用
putimage() 函数可以显示图片,而 loadimage() 只是预加载图片的。去除背景
如果你想显示一张去除了背景的图片,就像下面这样。


你大概就会这么写。
CPP#include <bits/stdc++.h>
#include <easyx.h>
#include <graphics.h>
using namespace std;
int main()
{
initgraph(640, 480);
IMAGE img;
IMAGE img2;
loadimage(&img, L"D:\\C++\\演示图片\\外太空.png", 640, 480);
putimage(0, 0, &img);
loadimage(&img2, L"D:\\C++\\演示图片\\战斗机.png", 100, 100);
putimage(200, 200, &img2);
Sleep(10000);
closegraph();
return 0;
}
结果出来后你就会大吃一惊。


这是什么???
其实你还没有掌握方法,接下来我来教你实现代码。
首先,你要把上面那张战斗机的图片去除背景(找修图软件去除就行,但记得裁剪一下去掉水印)。
首先,你要把上面那张战斗机的图片去除背景(找修图软件去除就行,但记得裁剪一下去掉水印)。弄好后按照上面的代码写一下。但这还没完,你需要手写一个
CPPtransparentimage 函数,函数如下。void transparentimage(int x, int y, IMAGE img)
{
IMAGE img1;
DWORD* d1;
img1 = img;
d1 = GetImageBuffer(&img1);
float h, s, l;
for (int i = 0; i < img1.getheight() * img1.getwidth(); i++)
{
RGBtoHSL(BGR(d1[i]), &h, &s, &l);
if (l < 0.03)
{
d1[i] = BGR(WHITE);
}
if (d1[i] != BGR(WHITE))
{
d1[i] = 0;
}
}
putimage(x, y, &img1, SRCAND);
putimage(x, y, &img, SRCPAINT);
}
这个函数的具体流程和详解如下。
- 遍历 img1 的每个像素,转换为 HSL 色彩空间,提取亮度 。
- 如果亮度很低,也就是 ,就认为是黑色背景,将该像素设为白色。
- 如果不是白色,就将该像素设成 ,也就是全透明。
putimage(x, y, &img1, SRCAND);是用 img1 以 SRCAND 模式绘制,保留目标区域的形状遮罩。putimage(x, y, &img, SRCPAINT);表示再用原图 img 以 SRCPAINT 模式绘制,让彩色部分叠加。
这样,我们就得到了完全去除背景的图片。
transparent 函数代码和详解部分内容来源于网络
最后,我们把这个函数加到原来的代码里,就大功告成了!
实现代码向下看。
CPP#include <bits/stdc++.h>
#include <easyx.h>
#include <graphics.h>
using namespace std;
void transparentimage(int x, int y, IMAGE img)
{
IMAGE img1;
DWORD* d1;
img1 = img;
d1 = GetImageBuffer(&img1);
float h, s, l;
for (int i = 0; i < img1.getheight() * img1.getwidth(); i++)
{
RGBtoHSL(BGR(d1[i]), &h, &s, &l);
if (l < 0.03)
{
d1[i] = BGR(WHITE);
}
if (d1[i] != BGR(WHITE))
{
d1[i] = 0;
}
}
putimage(x, y, &img1, SRCAND);
putimage(x, y, &img, SRCPAINT);
}
int main()
{
initgraph(640, 480);
IMAGE img;
IMAGE img2;
loadimage(&img, L"D:\\C++\\演示图片\\外太空.png", 640, 480);
transparentimage(0, 0, img);//唯一不同的是把putimage变为transparentimage并去掉取地址符
loadimage(&img2, L"D:\\C++\\演示图片\\战斗机2.png", 100, 100);
transparentimage(200, 200, img2);
Sleep(10000);
closegraph();
return 0;
}
运行结果如下。


设置文字字体
接下来的几项讲解就是有关插入文字的了。
如果你想插入文字,就先要设置字体,我们可以用
CPPsettextstyle() 函数,先看示例代码。settextstyle(22, 0, _T("微软雅黑"));
这个函数里的第一个参数是字体的高度,以像素为单位,第二个参数表示字体宽度,如果是 表示自适应宽度(程序自动帮你调好宽度,推荐这种方法),但如果写别的数字就代表手动设定字体宽度,但一设置不好字体就容易变形(不推荐),第三个参数表示字体的名称,因为 Visual 默认是单字节模式,所以要加入
_T(),如果你设置的是多字节模式,第三个参数直接写 "微软雅黑" 就行,但如果你想要别的字体,填入字体名称即可。设置文字颜色
既然要显示文字,那设置文字颜色就是必需的了。那这时我们就会用到
CPPsettextcolor() 函数。先看一下函数原型。void settextcolor(COLORREF color)
那么用法是什么呢?其实很简单,只需要往
settextcolor() 函数的括号里填入颜色名称即可。例如 RED 等,也可以填入 进制的颜色,如 0xFFFFFF。示例代码如下。
CPPsettextcolor(RED);
settextcolor(0xFFFFFF);
显示文字
说了这么多,终于到了显示文字了。
先看示例代码。
CPP#include <bits/stdc++.h>
#include <easyx.h>
#include <graphics.h>
int main()
{
initgraph(640, 480);
settextstyle(22, 0, _T("微软雅黑"));
settextcolor(0xFFFFFF);
outtextxy(100, 100, _T("Hello, EasyX!"));
Sleep(5000);
closegraph();
return 0;
}
运行结果如下。


现在就是详解时间。我们用的是
outtextxy() 函数来显示文字,第一个参数为所显示文字的 坐标,第二个参数为所显示文字的 坐标(坐标位置为所显示文字的第一个字符的左上角),第三个参数就是要显示的文字(中英文都可以显示)。加 _T() 是为了让文字和 TCHAR 类型匹配。广告
欢迎加团!
下期预告
在下期的高阶篇里我会给大家讲到如何做一个弹窗、如何把弹窗在被 EasyX 窗口默认挡住的情况下将其置顶、如何判断鼠标位置和判断鼠标是否按下等,我们下期再见!
相关推荐
评论
共 9 条评论,欢迎与作者交流。
正在加载评论...