SDL_Image STB_Image 中文路径

引言

我最近在研究sdl_image与stb_image这两个图片库,用于给vulkan传递图片。

中文路径会加载失败返回NULL

介绍字符串

C++中字符串可以用char*来表示,也可以用wchar_t来表示。

由于中文字符占两个字节(不确定对不对),所以中文推荐采用wchar_t。

不过有时候我们用到某个库时只能传递char*所以需要转换一下:

wchar_t* file = L"你好";
char* new_file;
int iSize = WideCharToMultiByte(CP_ACP, 0, file, -1, NULL, 0, NULL, NULL);
new_file = (char*)malloc((iSize+1));
WideCharToMultiByte(65001 /*CP_UTF8*/, 0, file, -1, new_file, iSize, NULL, NULL);

注意:wchar_t的字符串要加大写L。

拓展:wchar_t - 百度百科

以上这个操作是将unicode编码的wchar_t转为了char的utf8,至于能不能使用则需要看情况。

因为有可能你的char本身就是unicode编码,虽然打断点看到乱码字符但是能用。这个编码转换还需要加深理解。

无用拓展:我使用的pybind11就会自动将py的字符串转到c++的char或wchar_t或std::string上,配合上述的转换可以解决很多中文路径问题。

介绍STB_Image

这个库支持读写图片以及加载字体,非常小巧。

网上一般都是用的stbi_load函数,需要传递文件路径。

我用的是stbi_load_from_file函数来加载图片,功能一样只不过需要自己加载文件传递FILE指针

 可以看到我为了使用中文,采用了unicode编码的wchar_t字符串路径。

并且使用_wfopen来得到文件指针并传递给stb_image库。

介绍SDL_Image

这个库依赖于sdl2,同样可以加载图片并且功能更加强大,里面默认集成了上述stb_image库

 这里我采用了unicode编码的char*字符串路径,经过测试我如果传递utf8编码的char*字符串会失败返回NULL。

同时由于API限制也不能愉快的传递wchar_t字符串,所以只能这样了,好在我使用的pybind11能自动帮我转换好,节省了大量时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值