ピクチャボックスへのリアルタイム表示 – プログラミング – Home

ピクチャボックスへのリアルタイム表示
 
通知
すべてクリア

[解決済] ピクチャボックスへのリアルタイム表示


くぽ
 くぽ
(@くぽ)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

しがない1学生、VC++ビギナーです。
Visual Stadio 2008 VC++ ダイアログベースの環境で
勉強してます。

「連続で処理したデータをビットマップファイルにして
ピクチャボックスにリアルタイムで表示させたいです」

①ビットマップ読み込み
②ピクチャボックスに表示
③ビットマップを保存
の繰り返しでできるのかな?と思っています。
①と③はできたものの、②が実現できません…。

ネットで調べましたところ、
---
A.
dispflg = 0で初期化した後、

B.
OnPaint()で
if(dispflg){
CDC* pDC = m_pict.GetDC(); //デバイスコンテキストを取得
CDC myDC; //ビットマップ表示用デバイスコンテ
キスト
CBitmap myBMP; //ビットマップ処理用オブジェクト
myBMP.LoadBitmap(IDB_BITMAP_SAMPLE); //画像読み込み
myDC.CreateCompatibleDC(pDC); //myDCをpDCと互換性のあるものにする
CBitmap* oldBMP = myDC.SelectObject(&myBMP);//myBMPを選択
pDC->BitBlt(0,0,240,320,&myDC,0,0,SRCCOPY); //ビットマップを転送
myDC.SelectObject(oldBMP); //元のビットマップに戻す
}

C.
ボタンの関数で
dispflg = 1;
Invalidate(); //再描画
---
とあったので試してみました。
しかし、
自分で名付けた(char型)ビットマップを表示させる方法が
わかりません。。。

bits[(pict_h-1-y)*pict_w +x*3+0]=値…、といった感じで
配列にデータが格納されています。

どなたか、ご教授願えませんでしょうか?


引用未解決
トピックタグ
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

要はビット列データをビットマップとして描画したいということでしょうか?
であれば、DIBビットマップを用います。

以下のHPの
http://eternalwindows.jp/graphics/bitmap/bitmap00.html
[DIB]を参照してください。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

Windowsで扱えるbitmap形式の画像データについて
勉強された方が良いです。
bitmapと一言で言ってもフォーマットは微妙に違いがありますし。
Windowsで言うbitmap形式の画像データは単に画素データが並んでいるだけ
ではなくてヘッダー部とか色々ありますからどれも含めて用意できて無いと
表示出来ないと思います。
また、一画素をどのように表現するかによっても格納状態が変わります。
そこまで含めて理解したうえで処理しないとうまく行かないはずです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

誤字(^^;

誤)
ではなくてヘッダー部とか色々ありますからどれも含めて用意できて無いと

正)
ではなくてヘッダー部とか色々ありますからそれも含めて用意できて無いと


返信引用
Pegasus
 Pegasus
(@Pegasus)
ゲスト
結合: 20年前
投稿: 4
 

CImageを使えば簡単にできそうです

http://ayusya.hp.infoseek.co.jp/ProgramCTip.html#DrawBitmapFileEx
あたり参考になるかと。。。


返信引用
Pegasus
 Pegasus
(@Pegasus)
ゲスト
結合: 20年前
投稿: 4
 

ごめんなさい。
配列からじゃなくてファイルから
読み込みたいものだと勘違いしてました


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

配列から直接描画することもできますが、
普通はウインドウに描画できるオブジェクトに変換するんじゃないでしょうか。

一般的には、
GDIで描画(32ビット以下画像のみ)
CreateDIBSectionやCImageでDIBセクションを作成→BitBlt/StretchBltで描画

GDI+で描画(GDIよりは低速)
Bitmapオブジェクトを作成→Graphicオブジェクトに描画

WICで描画(Windows7 高速)
IWICBitmapオブジェクトを作成→Direct2Dで描画

って感じでしょうか。


返信引用
飛んできたどらやき
 飛んできたどらやき
(@飛んできたどらやき)
ゲスト
結合: 15年前
投稿: 16
 

あらゆる方法がありますが、
MFC、ダイアログベース上で
くぽさんのコードから察すると

①ダイアログクラスOnPaintメソッド内で、
 ピクチャボックスのウィンドウ取得

②CImageクラスでファイル画像を読込

③CDCのStretchBltを使い
 CImageクラスのビットマップハンドルから
 メモリデバイスコンテキストへ張り付け
 (CreateCompatibleDCメソッド、SelectObjectメソッド辺りを参考)

④::StretchBltのSRCCOPYにてHDCへとコピー

この手順が手っとり早いんじゃないでしょうか。


返信引用
くぽ
 くぽ
(@くぽ)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

みなさん、ご指摘ありがとうございます。

勉強不足もあり、教えていただいたHPや本で学習した結果、
ダイアログの場所と表示内容を指定して描画できました。
SetDIBitsToDeviceを利用しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました