使用lodepng解码PNG图片时出现错误,请求技术支持
问题分析与解决方案
嘿,我看出来你代码里的问题啦——你调用lodepng::decode的时候,错误地把width和height转成临时的unsigned值传进去了,但lodepng的这个解码函数需要这两个参数是可修改的引用,用来返回图片实际的宽高。临时值没法被函数修改,这就是触发错误的核心原因。
而且你一开始把宽高硬设为256也没必要,函数会自动把图片真实的宽高赋值给这两个变量,根本不需要提前指定。
修正后的代码示例
#include <vector> #include <lodepng.h> #include <iostream> int main() { const char* path = "image.png"; unsigned width = 0, height = 0; // 初始化为0即可,函数会填充实际尺寸 std::vector<unsigned char> image; unsigned error = lodepng::decode(image, width, height, path); // 一定要加错误检查,能帮你快速定位问题 if(error) { std::cout << "解码出错:" << lodepng_error_text(error) << std::endl; } else { std::cout << "图片解码成功!宽:" << width << ",高:" << height << std::endl; // 这里可以处理解码后的像素数据啦 } return 0; }
关键修正点
- 删掉
unsigned(width)和unsigned(height)的强制转换,直接传width和height变量(注意它们的类型必须是unsigned,和函数参数要求匹配) - 不需要提前把宽高设为256,函数会自动把图片的真实宽高赋值给这两个变量
- 加上错误检查逻辑,用
lodepng_error_text(error)能拿到更具体的错误描述,比单纯的错误码好用多了
你对比官方示例代码就会发现,人家也是直接传unsigned类型的宽高变量当引用参数,和咱们修正后的逻辑完全一致~
内容的提问来源于stack exchange,提问作者user3684950
相关产品推荐
相关产品推荐

