画像処理関係の仕事でopenFrameworksを使ってプロトタイピングしている*1のですが、各形式の相互変換のやり方をよく忘れるのでメモ。
ofTextureとofFboは、ofPixelsを経由してofImageへ。下のコードは、ofTextureだけど、ofFboにも同じreadToPixels()がある。
ofTexture tex; // 変換元のテクスチャ
ofPixels pixels;
tex.readToPixels(pixels);
ofImage image;
image.setFromPixels(pixels);
ofPixelsからofTextureへ。
ofPixels pix; // 変換元のofPixels
ofTexture tex;
tex.loadData(pix);
画像処理ならよく使用するOpenCV。ofPixelsからcv::Matへの変換。ofPixelsはもちろんアロケート済みであること。データ自体はコピーされないので、高速(らしい)。
ちなみによく縦横逆にして怒られてます。
ofPixels pix; cv::Mat mat(pix.getHeight(), pix.getWidth(), CV_8UC3, pix.getData());
ofImageでJPGを保存しようとしたら保存できなかったことがあったので、cv::Matを使って保存したりした。ofImageはJPGに対応しているはずだけど。。解像度が大きめだったからかな?(5800×2900前後)
openFrameworksで画像を保持する必要がある場合は、ofPixelsで持っておくのが一番良さそう。なんだかんだでofPixelsを経由するみたいなので。