使用数组操作图像的方法并没有什么特殊。你的代码在处理文件名时有错误,字符串里面的 (i+1) 不会自动计算,你需要先拼接出正确的文件名并保存到字符串中,再通过 loadimage 加载文件。
针对你所用的 VC6,可以这样批量加载并显示图片 (E:\images\img-1.png、E:\images\img-2.png、E:\images\img-3.png):
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
initgraph(640,480);
IMAGE img[3]; // 图像数组
char s[100]; // 文件名字符串
for (int i = 0; i < 3; i++)
{
sprintf(s, "E:\\images\\img-%d.png", i + 1); // 根据数字生成文件名
loadimage(&img[i], s); // 加载图像文件
putimage(100 + i * 100, 50, &img[i]); // 显示图像
}
_getch();
closegraph();
return 0;
}
VC6 过于久远了,建议使用更高版本的 VC。对于高版本的 VC,推荐使用 unicode 字符串,代码调整如下:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
initgraph(640,480);
IMAGE img[3]; // 图像数组
wchar_t s[100]; // 文件名字符串
for (int i = 0; i < 3; i++)
{
_swprintf(s, L"E:\\images\\img-%d.png", i + 1); // 根据数字生成文件名
loadimage(&img[i], s); // 加载图像文件
putimage(100 + i * 100, 50, &img[i]); // 显示图像
}
_getch();
closegraph();
return 0;
}
第二个问题,使用图像对象初始化二维数组,可以像普通二维数组初始化一样写,例如:
#include <graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480);
IMAGE img1, img2, img3, img4;
loadimage(&img1, _T("E:\\images\\img-1.png"));
loadimage(&img2, _T("E:\\images\\img-2.png"));
loadimage(&img3, _T("E:\\images\\img-3.png"));
loadimage(&img4, _T("E:\\images\\img-4.png"));
// 用多个 IMAGE 对象初始化二维数组
IMAGE img[2][2] = { img1, img2, img3, img4 };
// 测试输出
putimage(100, 200, &img[0][0]);
putimage(150, 200, &img[0][1]);
_getch();
closegraph();
return 0;
}