0

OSX 10.6.8 を実行している Macbook Pro に Cinder v0.8.4 をダウンロードし、Xcode を使用して Welcome to Cinder の第 1 章の作業を開始しました。Tinderbox ツールを使用して、CinderProjectApp という名前の新しいプロジェクトをデフォルトのオプションで作成しました。また、指示に従って、ブースト ライブラリがデフォルト (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 コード全体をコンパイルすると、次の行でエラー: conversion from 'boost::filesystem3::path' to non-scalar type 'std::basic_string, std::allocator >' が要求されます。ファイルへのパスを指定します。これは構文的に有効に見えるので、ここで getOpenFilePath の何が問題になっているのか疑問に思っています。

コードの残りの部分を確認する必要がある場合は、お知らせください。ところで、ここに私の質問をクロスポストしました。

4

1 に答える 1

2

Forum.libcinder.org での Paul と Sansumbrella の助けのおかげで、try-catch を setup 関数に移動し (効率化のため)、パスを保持するために ci::fs::path オブジェクトを使用しました。これが私の新しい setup() 関数です (上記の draw() のすべてが、try-catch ロジックの並べ替え以外は変更されていないと仮定します):

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 に答える