C++easy库

加载动画

easyx库本身并没有给出gif的加载函数,所以我们需要通过另一种方式实现gif的“播放

通过将gif图提取出相应关键帧,然后对关键帧进行逐帧播放

以下是代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>

IMAGE images[92];//92张关键帧
bool isLoaded = 0;
void loadImg() {
wchar_t filename[20];
for (int i = 0; i < 92; i++) {
//这里我是将原有的gif图拆分为了92张关键帧
wsprintf(filename, _T("../gif/%d.png"), i + 1);
loadimage(&images[i], filename, 1080, 810);//读相关图片,并设置读入大小为1080*810
}
}

void loading() {
std::cout << "窗口初始化中..." << std::endl;
// 加载关键帧图片
if (!isLoaded) {
isLoaded = 1;
loadImg();
}
HWND hwnd = initgraph(1080, 810); // 初始化绘图窗口大小
MoveWindow(hwnd, 380, 200, 1096, 849, false);

//采用批量绘制,防闪烁
BeginBatchDraw();//批量绘制开始

for (int i = 0; i < 92; i++) {
cleardevice(); // 清空屏幕
putimage(0, 0, &images[i]); // 绘制当前帧图片
FlushBatchDraw(); // 批量绘制刷新
Sleep(25); // 控制每帧显示时间,单位为毫秒
}
EndBatchDraw();//批量绘制结束
std::cout << "窗口初始化完毕" << std::endl;
}


辅助函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#include <codecvt>
#include <comutil.h>
#include <string>
#pragma comment(lib, "comsuppw.lib")

#define _MIN(x,y) (((x)<(y))?(x):(y))

//wstring转string
std::string wstringTostring(const std::wstring& ws) {
_bstr_t t = ws.c_str();
char* pchar = (char*)t;
std::string result = pchar;
return result;
}

//string转wstring
std::wstring stringTowstring(const std::string& s) {
_bstr_t t = s.c_str();
wchar_t* pwchar = (wchar_t*)t;
std::wstring result = pwchar;
return result;
}