关于Easyx中的saveimage如何连续保存图片问题

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;
}

 最后终于成功了:

发现之前网上似乎还没有正确的解决方法,

所以写了这篇博客。 

希望对您有所帮助。

如有学术问题敬请纠正。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值