読者です 読者をやめる 読者になる 読者になる

cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

RICOH THETAの連番画像ビューア

[1]によると、

RICOH THETAが、携帯アプリ経由の操作でのインターバル撮影に対応したそうです。すぐに本家ビューアで連番画像に対応してくれると思いますが、テンポラリに需要があるかもしれませんので、連番再生に対応したビューアの実行ファイルを置いておきます。(本家が対応したら消すかも)

ricohThetaExample.zip - Google ドライブ  (日本語パス対応2014/10/2)

万一、本プログラムに起因して損害が発生いたしましても、一切責任を負いかねます。 

現在見つかっている不具合

  • プログラムの置かれているのと同じディスク上に置かれた画像しか読み込むことが出来ません。openframeworksのdragEvent(ofDragInfo dragInfo)のファイルパスにドライブ名が与えられないため。ofAppGLFWWindow.cppの関数を一つ修正する。(修正済み)

    //------------------------------------------------------------
    void ofAppGLFWWindow::drop_cb(GLFWwindow* windowP_, int numFiles, const char** dropString) {
      ofDragInfo drag;
      drag.position.set(ofGetMouseX(), ofGetMouseY());
      drag.files.resize(numFiles);
      for(int i=0; i<(int)drag.files.size(); i++){
        if( !Poco::URI(dropString[i]).getScheme().empty() ) drag.files[i] = Poco::URI(dropString[i]).getScheme() + ":" + Poco::URI(dropString[i]).getPath();
        else drag.files[i] = Poco::URI(dropString[i]).getPath();
      }
      ofNotifyDragEvent(drag);
    }

  • 日本語を含むファイルパスが読めない。Windowsドラッグ&ドロップで渡されるファイルパスの文字コードがCP932で与えられているため、なのでiconvを導入してCP932->UTF-8に変換する、などすれば解決します。そのうち対応します。(修正済み)

    char *output;
    convert("CP932", dragInfo.files[i].c_str(), &output); // http://shnya.jp/blog/?p=236
    cout << output << endl;

 

表示画像の変更方法は、表示したい連番画像をドラッグアンドドロップです。

キーボード操作はこんな感じ。マウスの左クリックで視点を回転、ホイールでズームを変更します。

f: full screen

s: timer start/stop

up cursor: speed up

down cursor: speed down

right cursor: next image

left cursor: previous image

esc: exit

 

f:id:cvl-robot:20141001165600p:plain

以前紹介したソースコードコンパイルしたものです。


おまけ:RICOH THETAのJPG画像を平面-球変換してOpenGLで表示する(その8) - cvl-robot's diary

openFrameworksのファイルダイアログでの日本語譜ファイルの取り扱い方法

openFrameworksでの日本語ファイルの扱いは、まだあまり整理されておらず難があります。ドラッグアンドドロップに関しては、上記で紹介しました。ファイルダイアログでの取り扱い方法についてもメモしておきましょう。おりしも、[2]で紹介されておりました。

ofSystemUtil.cpp

のstd::string convertWideToNarrow()関数の中身をこう書き換えてしまうことがてっとりばやいそうです。

  std::wstring wstr(s);
  std::string ret;
  narrow(wstr, ret);
  return ret;

narrow関数は[3]の文献から引用のこと。詳細は[2]を見てください。

 

[1] RICOH THETAがインターバル撮影に対応 - デジカメ Watch

[2] openFrameworksを使ったフレーム編集 - 株式会社CFlatの明後日スタイルのブログ

[3] std::stringとstd::wstringの相互変換 - kryozahiroの日記