Easyx中的saveimage();函数是用来保存图片的函数
用法详见:EasyX 文档 - saveimage
如果你遇到了如下场景:
当我们写一个循环,每次循环都画了一张新的图片,然后在循环末尾使用saveimage函数,想要把每次循环的图片都保存下来。
你可能会这样使用:
想和printf一样,把变量a传进字符串,这样每次的文件名都不同,就不会存在覆盖状况。
但实际上saveimage里面的字符串的类型是const char*,并不支持这种做法,最后你得到的将是一张名为“%d.png”的图片(因为所有图片都重名,所以全都覆盖掉了)。
那么该如何解决呢?
根据easyx作者提供的QQ群和问答网站(qa.codebus.cn),我找到了两个类似的问题和作者的解答,下面列举其中一个:
作者的回答是这样的
但是,我在VS2022上使用这种方式想要实现连续保存图片,发现编译器会报错:
显示实参和形参因为类型不同而不兼容
这时无论强制类型转换成(char*)还是(LPCTSTR),都不能正常保存图片(一个都不会保存)。
所以这种方法也行不通。
但是通过溯源定义,我发现LPCTSTR类型好像就是char*,所以就有了如下解决方案:
定义一个字符串buf
用sprintf给buf赋上文件要存放的地址和文件名
然后用savaimage调用buf
因为此时buf的类型是char*,所以不会再像刚才一样报错
具体实现如下:
int main()
{
char buf[100] = { 0 };
int a=0;
//绘图操作...
for(a=0; a<100; a++)
{
sprintf(buf, "C:\\Users\\Administrator\\Desktop\\fsw\\%d.png", a);//字符串里换上你的文件路径
saveimage(buf);
}
return 0;
}
最后终于成功了:
发现之前网上似乎还没有正确的解决方法,
所以写了这篇博客。
希望对您有所帮助。
如有学术问题敬请纠正。