c++ - NoDecodeDelegateForThisImageFormat 使用 ImageMagick 读取 .png 文件时出错

标签 c++ image opengl textures blender

我正在尝试使用 ImageMagick 通过使用 ASSIMP 库加载网格(在 Blender 中制作)的纹理。网格具有单一 Material 和单一纹理。

我试图学习两个教程:Tutorial38Tutorial22 .

下面的代码块是有问题的地方;

bool Texture::Load()
{
    try {
        m_pImage = new Magick::Image(m_fileName); /* RIGHT HERE IT OCCURS */
        m_pImage->write(&m_blob, "RGBA");
    }
    catch (Magick::Error& Error) {
        std::cout << "Error loading texture '" << m_fileName << "': " << Error.what() << std::endl;
        return false;
    }

    glGenTextures(1, &m_textureObj);
    glBindTexture(m_textureTarget, m_textureObj);
    glTexImage2D(m_textureTarget, 0, GL_RGBA, m_pImage->columns(), m_pImage->rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, m_blob.data());
    glTexParameterf(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    return true;
}

它几乎立即退出 Try-Catch 并出现当前错误:

“加载纹理时出错,'Resources/white.png': myproject.exe: NoDecodeDelegateForThisImageFormat 'Resources/white.png' error/constitute.c/ReadImage/550

据我所知,ImageMagick 已正确安装,我已多次尝试手动编译它,但我总是以新库出现 Unresolved external 错误而告终(它们似乎比原来的库大 2-3 MB)包含在项目中的)。

尝试的版本:

ImageMagick-6.6.5-10 ImageMagick-6.6.0 ImageMagick-6.8.9 ImageMagick-windows zip 来自他们的说明页面。

我在尝试自安装程序二进制文件时遇到的一个大问题是,当代码需要两者时,它们不包括候选发布库和调试库;而我所提到的编译的源版本不正确并导致 Unresolved external 错误,或者没有明确存放它们的 Include 和 Lib 文件夹。

我已经联系了教程的开发者,但到目前为止他唯一说的是我可能安装了错误版本的 ImageMagick 并且与他包含的版本不兼容......没有说哪个版本是正确的是。

编辑 - 1: -尝试从 Here 安装/重新安装 libpng没有变化。

最佳答案

好吧,令人尴尬的是,经过三个多月的精心折磨,我找到了解决方案,那就是将编译器切换到“发布”模式而不是“调试”模式。我不再提示并完美地加载了我拥有的纹理。

无法在“调试”模式下工作似乎是 ImageMagick 的错误或 Visual Studios 2010 的错误,我想我会提交错误报告。

关于c++ - NoDecodeDelegateForThisImageFormat 使用 ImageMagick 读取 .png 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018661/

相关文章:

c# - 如何查找鼠标单击是否在 wf 面板中呈现的图像上?

image - Gnuplot:离散数据的 3D 表面

c - OpenGL:创建新几何体时触发事件

c++ - 在现代 OpenGL 中计算光的每个片段法线

c++ - coroutine_handle<Promise>::from_promise() 在 C++ 中的工作原理

c++ - 如何优化 C++ 对象 I/O 操作的性能?

c++ - 使用 Swift 将 MergeCom DICOM 工具包包含在 ios 中

c++ - C++ 中的模拟对象

使用 MATLAB 和 C 将 .bin 转换为图像系数并创建二值图像

c++ - openGL 平滑线