C ++ PNG解码器错误

时间:2018-05-17 21:42:22

标签: c++

我正在尝试使用this png decoder,但我在使用此基本示例代码时遇到错误:

const char* path = "image.png";
int height = 256, width = 256;
vector<unsigned char> image;
unsigned error = lodepng::decode (image, unsigned(width), unsigned(height), path);

error message

我不确定导致这种情况的原因,因为它与回购邮件的this example几乎相同。

1 个答案:

答案 0 :(得分:0)

错误不言自明。您没有传递decode()期望的正确参数。

查看您尝试调用的decode()重载的实际声明(有3个重载可用):

unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
                const std::string& filename,
                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);

特别注意第二个和第三个参数是由非const引用传递的。您的代码在传递给这些参数时声明int变量类型转换为unsigned。编译器必须创建临时unsigned变量来保存值,但临时值不能绑定到非const引用。

因此,您的代码与decode()重载(或任何重载)的声明不匹配。因此,可以找到接受您传入的参数的decode()没有重载的错误消息是正确的。并且,如果您实际上更仔细地阅读了错误消息,它会向您显示编译器检测到的参数类型,您可以清楚地看到它与您尝试调用的decode()重载的声明不匹配。

您需要将widthheight变量从int更改为unsigned,并摆脱类型转换:

const char* path = "image.png";
unsigned height = 256, width = 256;
vector<unsigned char> image;
unsigned error = lodepng::decode (image, width, height, path);