• ベストアンサー

バッファのデータをビットマップで表示するにはどうしたら良いんでしょうか?

visual C++ で 1.カメラ(静止画)から得た画像をバッファに取り込む。 2.バッファにあるデータを(配列で)ビットマップで表示する。 にはどうしたら良いんでしょうか? また、他に何か良い方法があったら教えて下さい。

  • 6-e
  • お礼率48% (79/162)

質問者が選んだベストアンサー

  • ベストアンサー
  • takscape
  • ベストアンサー率57% (15/26)
回答No.1

1. カメラから画像を取り込む これについては、カメラ側の仕様が分からないことには、なんとも言えません。DirectShowを用いてキャプチャ可能かもしれませんし、あるいはTWAINを使う必要があるかもしれません。 2. バッファにあるデータをビットマップ表示する これに関しても、バッファ内のデータがどのような形式かに依存します。画像データを表す方式はYV12, I420, UYVY, RGB24などいくつもあり、これをWindowsが表示可能な形式(RGB24, RGB32など)に変換する必要があります。 もしバッファ内のデータがRGB形式の場合は、CreateCompatibleBitmap WIN32関数にデータを渡すなどして、直接ビットマップオブジェクトを作成することが可能です。 下記のページが参考になるかと存じます。

参考URL:
http://black.sakura.ne.jp/~third/system/winapi/win105.html
6-e
質問者

お礼

御礼遅れました。ありがとうございました。

関連するQ&A

  • ビットマップの表示について

    プログラムの初心者です。visual sudio net 2003でビットマップの表示の仕方について困っています。猫でもわかるwindows プログラム という本を参考にビットマップリソースをつくりソースファイルも参考書と同じようにしたのですが、肝心なビットマップが表示されません。ちなみにエラーは出ていません。ただ画像が表示されません。 これは使っているパソコンにも問題があるのでしょうか? パソコンはWinosw Vistaを使っています。 どうかご教授おねがいします。何か説明に足りないところがあればまた足しますのでよろしくおねがいします。

  • バッファサイズについて

    今画像データについて勉強しています。ビットマップファイルについてなんですが大きさを240×320の場合の時 #define WSIZE 320 /*ビットマップの幅*/ #define HSIZE 240 /*ビットマップの高さ*/ #define BSIZE 1024 /*バッファサイズ*/ と書くんですがなぜBSIZE 1024 となるかわかりません。教えてください。

  • 動画の解像度とデータの取り出しについて

    高精度のビデオカメラが売り出されていますが、そのビデオ画像から静止画を取り出す場合、画素数がかなり落ちるのではないかと思います。取り出した静止画は結局PCのディスプレイに表示して見るだけなので高精度のデータである必要がないということなのだろうと思います。ディスプレイに表示してもきれいにじゃないかというわけです。でも、実際はデータとしてみたら劣化していると思います。そういうことでしょうか。  そこで、静止画を取り出した場合、元のビデオカメラの精度をできるだけ保持するように取り出す方法はあるでしょうか。4Kビデオカメラというは4000万画素だと思いますが、静止画に落としても1000~2000万画素ぐらいまでにしてほしいと思ったらどのようにすればよいでしょうか。静止画を取り出す際の精度の設定すればよいでしょうか。そのようなものがあったり無かったりすると思います。よいソフトなどありましたら教えて頂きたいのですが。ビデオは4Kでmp4で出力されます。それをjpeg, bmp,tiffなどにできるだけ精度よく変換するということなのですが。 よろしくお願いします。

  • 画像ボードのバッファにある画像をOpenCVで処理する方法を教えてください

    カメラの画像をグラフインというメーカーの画像ボードを介してPCに取り込んでいます。 ここでその画像をOpenCVを使用して処理しようとしています。 一度保存した画像を処理するのはできるのですが、 画像ボードのバッファからデータを読み込んできてきて処理する方法が分からず困ってます。 Iplimageという構造体にデータを入れればよさそうなのですが、 その変換のやり方がわかりません。 開発環境はWindowsXP visual C++ 2005 MFC です。 当方、プログラムを始めたばかりなので できれば詳しく教えて頂けると助かります。 よろしくお願いいたします。

  • 画像処理 ビットマップ ダブルバッファリング

    「猫でもわかるWindowsプログラミング」を参考に、ビットマップを表示するプログラムを作っています。 下記ソース(WM_PAINT部分のみ抜粋)のような感じで、 読み込んだビットマップをダブルバッファリングを用いて表示させたいのですが、 何も表示させることができず、困っております。 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) {   HBITMAP hBmp;   BITMAP bmp_info;   HDC hDC, hDC_mem;   PAINTSTRUCT ps;   int w=0, h=0;   switch (msg) { case WM_PAINT:   hDC = BeginPaint(hwnd,&ps);   hDC_mem = CreateCompatibleDC(hDC);   hBmp=LoadBitmap(hInst, TEXT("MYBMP"));   hBmp = (HBITMAP)LoadImage(hInst, TEXT("MYBMP"), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info); w = bmp_info.bmWidth; h = bmp_info.bmHeight; SelectObject(hDC_mem, hBmp); BitBlt(hDC, 0, 0, w, h, hDC_mem, 0, 0, SRCCOPY); DeleteDC(hDC_mem); DeleteObject( hBmp ); EndPaint( hwnd, &ps ); break; } } リソースですが、下記のように bitmap1.bmpを指定しており、画像はもちろんフォルダ内に入れ、 読み込める状態にはしています。   //   // Bitmap   //   MYBMP BITMAP "bitmap1.bmp"   #endif // 日本語 resources しかし、hBmpの戻り値を調べると NULL の値が入っています。当然画像は表示されません。 当方、Microsoft visual studio 2005を使っておりますが、このプロジェクトは、 Win32コンソールアプリケーション⇒Windowsアプリケーション で作成はせず、 Win32コンソールアプリケーション⇒コンソールアプリケーション で作成していますので、 ここが問題になっているのでしょうか? できれば、コンソールアプリケーションで作成したいですが、LoadImage関数は使えないのでしょうか? それとも他に問題点があるのでしょうか? 以前は動画処理をしており、SetDIBitsToDevice関数を使って配列の中身を指定し、画像をウィンドウ上に表示していました。 しかし、画像のちらつきが気になったため、ダブルバッファリングに改良しようとし、 調べてみたところ、ビットマップを用いるやり方が一般的なようでした。 そこで、まずはビットマップの表示をさせるプログラムをつくってみようと思ったのですが、つまずいている状態です。 環境は、 Microsoft Windows XP Home Edition Version2002 Service Pack 3 Pentium(R) 4 CPU 2.80GHz 1.0GB RAM Microsoft visual studio 2005(有料) です。 何かアドバイスをよろしくお願いします。

  • ビットマップ画像の座標を小数で扱う方法について。

    ビットマップ画像の座標を小数で扱う方法について。 プログラムでビットマップ画像を扱っています。 現在、ビットマップ画像のRGBの値を2次元配列に格納しています。 そのため、例えば画像の白い部分の座標がどこかを知りたいときは、2次元配列の場所を辿り、整数値として座標を得ています。 これを整数値ではなく、少数値で扱うことは可能でしょうか? 配列で扱う以外に方法が思いつかないです;; よろしくお願いします。

  • STLからビットマップデータへの変換

    STLスライスデータをビットマップデータ(画像データ)に変換 する方法を探しております。 有料でも良いのでそのようなソフトウェアをご存じの方がいらしたら 教えていただきたいと思います。

  • ビットマップの表示ができません。

    Visual Studio.net 2003 MFCを使用しています。 ビットマップの表示とフォームのサイズ変更はできたのですが、 以下のソースのように フォームのサイズをビットマップのサイズに変更すると ビットマップが表示されません。 一瞬表示はされているようですが、 真っ白になります。 フォームをきちんとビットマップのサイズに変更し、 ビットマップを表示するにはどうすればいいでしょうか? int num=35; void CProject1View::OnLButtonUp(UINT nFlags, CPoint point) {   // TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。   char str[128];   wsprintf(str,"c:\\test\\%d.bmp",num);num++;   HBITMAP hbm = (HBITMAP)LoadImage(NULL, str, IMAGE_BITMAP,0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION );   CBitmap *pBmp = CBitmap::FromHandle( hbm );   BITMAP bmp;   GetObject(hbm,sizeof(bmp),&bmp );   CDC bmpdc;   CDC *mydc=GetDC();   bmpdc.CreateCompatibleDC(mydc);   CBitmap *pOldBmp = bmpdc.SelectObject(pBmp);   GetParentFrame()->SetWindowPos(&wndTop,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE);   mydc->BitBlt( 0, 0,bmp.bmWidth, bmp.bmHeight, &bmpdc, 0, 0, SRCCOPY );   bmpdc.SelectObject(pOldBmp);   DeleteObject(hbm);   CView::OnLButtonUp(nFlags, point); }

  • ビットマップの描画方法

    こん○○は。 BCB5を使ってますが、 高速にビットマップを描画する方法はないでしょうか? TImage コンポーネントを使用し Picture->Bitmap->Canvas->Pixels[x][y] へ SDKから取得したカメラ画像データをTColor RGB(r,g,b)で設定しています。 フォームに画像が表示されるまで1秒ほどかかるためコマ送り状態になっています。

  • C言語でBMP(16bit)を扱う方法

    組み込みソフトの作成を行なっており、液晶に画像を表示するソフトを 作りたいと思っております。 16bitのビットマップ画像をC言語のソースにするにはどうすればよいでしょうか? interface2011年5月号の付録(Renesas RX62N)を使用して、3.5インチQVGAのTFT液晶に 画像を表示したいと思っているのですが、自分で用意した16ビットのビットマップ画像を どうすればC言語ソースに落とせるのかがわかりません。 付録のサンプルプログラムでは、pct_data[]={65535,65535,・・・・}; と各ドットを16bitで表現した配列になっているのですが、ビットマップデータからこのような 配列の作成方法を教えて頂けると助かります。 よろしくお願いいたします。

専門家に質問してみよう