ImageMagick错误:无法打开图像

时间:2014-05-15 17:23:41

标签: c++ string imagemagick magick++

我在我的应用程序中使用ImageMagick(Magick ++),但在尝试加载图像时出现错误:

Unable to open image '??': Invalid argument @ error/blob.c/OpenBlob/2657

从在线阅读其他人的问题??通常是尝试加载的文件,我显然没有将文件位置??传递给加载程序 - 所以它似乎无法解析我给它的字符串。尝试使用Unicode和多字节。从示例中复制项目设置。文件肯定存在,绝对是正确的位置。

代码:

LawlessFBXTexture* LawlessFBXTextureManager::CreateTexture(std::string pFullFilePath) 
{
    Magick::Image* img = nullptr;
    Magick::Blob blob;

    try
    {
        img = new Magick::Image();
        img->read(pFullFilePath);
        img->write(&blob, "RGBA");
    }
    catch (Magick::Error& Err)
    {
        std::string errstr = Err.what();
        std::wstring stemps = std::wstring(errstr.begin(), errstr.end());
        LPCWSTR sws = stemps.c_str();
        OutputDebugString(L"FBXSDK: ERROR: ");
        OutputDebugString(sws);
        OutputDebugString(L"\n");

        int ImageNotFound = 0;      /// Image Not found <---
        assert(ImageNotFound);
    }

    LawlessFBXTexture* tex = new LawlessFBXTexture();

    glGenTextures(1, &tex->TextureBuffer);
    glBindTexture(GL_TEXTURE_2D, tex->TextureBuffer);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->columns(), img->rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, blob.data());
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    return tex;
}

被调用:

LawlessFBXTexture* tex = CreateTexture("..\\..\\Asset\\Models\\LawlessCoreAsset\\DEFAULT_DIFFUSE.png");

3 个答案:

答案 0 :(得分:3)

我注意到这在发布模式下工作正常,没有进行更改。我很确定这是一个错误,所以我会在Magick论坛上发布我的发现。

答案 1 :(得分:1)

因此,在听取了OP的建议并将我的项目设置为发布模式后,一切都运行良好。也就是说,我很快意识到调试模式存在的原因非常充分。为没有给出运行时错误消息的程序编写代码是***的绝对痛苦。更不用说断点,断言等所有你喜欢的便利了。

事实证明,尽管为每个平台提供了多个二进制发行版,但根本没有可用的开发人员二进制文件。我的意思是,如果你想在使用Magick ++库时能够调试你的程序,你必须从源代码编译你的DLL(使用调试配置来编译这些DLL)。只有这样,您才可以将Debug编译模式用于与之链接的项目。

我在the thread发现了这个问题。请注意,在线程中它表示构建静态库,但这显然不是必需的,并且使用动态库选项构建可能更方便。

无论如何,如果你按照我提供的链接中列举的步骤进行操作,你最终应该能够调试你的Magick ++程序,而不需要拔掉头发:)

答案 2 :(得分:0)

出于某种原因,Visual Studio上的 Magick ++ 不喜欢/ MTd选项

  Configuration Properties->C++->Code Generation->Runtime Library
    Setting

它/ MT应该可以正常工作。