0

我刚刚在运行 OSX 10.6.8 的 Macbook Pro 上下载了 Cinder v0.8.4,并开始使用 Xcode 完成 Welcome to Cinder 的第 1 章。我使用 Tinderbox 工具创建了一个名为 CinderProjectApp 的带有默认选项的新项目。我还按照说明确保我的 boost 库与默认库 (1.4.2) 相同。

当我开始学习本教程时,我想看看是否可以从 /resources 文件夹加载我自己的图像,因此我下载了一个图像“Broccoli.jpg”并将其添加到我的 CinderProjectApp/resources/ 目录中。

这是我的 draw() 函数:

void CinderProjectApp::draw()
{
    gl::clear( Color( 0, 0, 0 ), true );

    try
    {    
        std::string p = FilePath( "", ImageIo::getLoadExtensions() );    

        if( ! p.empty() ) 
        { // an empty string means the user canceled    
            myImage = gl::Texture( loadImage( p ) );
        }
    }

    catch( ... ) 
    {
        console() << "Unable to load the image." << std::endl;
    }

    gl::draw(myImage, getWindowBounds());
}

当我编译整个小型 CinderProjectApp.cpp 代码时,出现错误:从 'boost::filesystem3::path' 转换为非标量类型 'std::basic_string, std::allocator >' 请求的行我指定文件的路径。由于这在语法上看起来是有效的,我想知道 getOpenFilePath 出了什么问题。

如果您需要查看其余代码,请告诉我。顺便说一句,我在这里交叉发布了我的问题。

4

1 回答 1

2

感谢Paul 和 Sansumbrella在 forum.libcinder.org 的帮助,我已将我的 try-catch 移至 setup 函数(为了提高效率),并使用 ci::fs::path 对象来保存路径。这是我的新 setup() 函数(假设除了 try-catch 逻辑的重新排序之外,上面的 draw() 中的所有内容都没有改变):

void CinderProjectApp::setup()
{

    try 
    {   
        ci::fs::path p = getOpenFilePath( "", ImageIo::getLoadExtensions());

        if( ! p.empty() ) 
        { // an empty string means the user canceled
            myImage = gl::Texture( loadImage( p ) );
        }
    }

    catch( ... ) 
    {
        console() << "Unable to load the image." << std::endl;
    }
}
于 2013-02-06T19:12:51.820 回答