あっさり出来ちゃいました。
C++/CLIで.NETっていじったことなかったんですけど、結構まだ泥臭いんですね。
それでも画像処理はOpenCVでやって、GUI作成は.NET Frameworkでって、かなりいいです。
即席で書いたIplImageからBitmapへの変換はこんな感じ。
Bitmap^ encodeIplToImage(IplImage *src) { // バッファにメモリを割り当てる Bitmap ^dst = gcnew Bitmap(src->width, src->height, Imaging::PixelFormat::Format24bppRgb); // 直接アクセス開始 BitmapData ^data = dst->LockBits( *(gcnew Drawing::Rectangle(0, 0, dst->Width, dst->Height)), Imaging::ImageLockMode::ReadWrite, PixelFormat::Format24bppRgb ); // データのコピー if (src->nChannels == 3) { memcpy(data->Scan0.ToPointer(), src->imageData, src->width * src->height * src->nChannels); } else { for (int i = 0; i < src->width * src->height; i++) { byte *p = (byte *)data->Scan0.ToPointer(); *(p + i * 3) = *(p + i * 3 + 1) = *(p + i * 3 + 2) = *(src->imageData + i); } } // 直接アクセス終了 dst->UnlockBits(data); return dst; }
でもこれだと画像が上下逆さまになっちゃう。:p