画像処理 – プログラミング – Home

通知
すべてクリア

画像処理

固定ページ 1 / 2

はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

また、質問なのですが、よろしくお願いします。
画像処理で、
HBITMAP hBitmapからHANDLE hBitmapに変換する
処理が分からないので教えてください。


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

HANDLE → Handle to an object.
HBITMAP → Handle to a bitmap.

ですから、普通にキャストできませんか?

HBITMAP hBitmap;
HANDLE hHandle;
hHandle = (HANDLE)hBitmap;


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

>HBITMAP hBitmap;
>HANDLE hHandle;
>hHandle = (HANDLE)hBitmap;
と入れてみたのですが変化がありませんでした。
HBITMAP hBitmapはdlg.cppで使用しています。ここのhBitmapのデータをcppに移した
いのですが、その際HANDLE   hBitmapに変更してデータを読み込ませたいのです。
どのようにしたらよいのでしょうか?
以上からでは説明不足でしょうか?
ご教授お願いいたします。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

問題の周辺のソースを見せていただけますか?


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

// 濃淡画像に変換(2値化込み)
int i, j;
unsigned char grayLevel;
unsigned char t = 127; //閾値設定

grayFlag = 1;
grayData = (unsigned char *)malloc(sizeof(unsigned char) * size);
for (j=0; j<h; j++) {
for (i=0; i<(w*3); i+=3) {
// pixelDataの色は,BGRの順
grayLevel = (unsigned char)(0.299 * *(pixelData + j*(w*3) + i+2)
+ 0.587 * *(pixelData + j*(w*3) + i+1)
+ 0.114 * *(pixelData + j*(w*3) + i));
if (grayLevel < t)
grayLevel = 0;
else
grayLevel = 255;
*(grayData + j*(w*3) + i) = *(grayData + j*(w*3) + i+1)
= *(grayData + j*(w*3) + i+2) = grayLevel;
}
}

// ビットマップハンドルの作成
hBitmap = CreateDIBitmap(hDC, &lpBMInfo->bmiHeader, 0, NULL, NULL,
DIB_RGB_COLORS);
// ビットマップを指定
::SelectObject (hCompatiDC, hBitmap);
// 画像のバイナリデータからDIBデータを作成
SetDIBits (hDC, hBitmap, 0, lpBMInfo->bmiHeader.biHeight, grayData, lpBMInfo,
DIB_RGB_COLORS);
// hCompatiDCのデータをhDCへコピーして表示
BitBlt (hDC, 0, 0, lpBMInfo->bmiHeader.biWidth,
lpBMInfo->bmiHeader.biHeight, hCompatiDC, 0, 0, SRCCOPY);
このプログラムがdlg.cppにあります。
この2値化のデータをcppに移したいのですが。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

すいません、「この2値化のデータを『cppに』移したい」というのがどうもよく解りま
せん。「cppに」って何ですか?


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

すみません!
>cpp
とは
BOOL SampleApp::InitInstance()
の入っているソースファイルのことです。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

「ソースファイルに移したい」のなら、単にcopy/pasteでいいと思いますが、そういう意
味じゃないですよね? 他のクラスから参照したい、ということですよね?

仮に、
・SampleAppが定義されているソース→app.cpp
・dlg.cppで定義されているclass → CDlg
とすると、

SampleAppがCDlgへのポインタを持っていて、CDlgがbitmapのhandleを返すpublic関数を
持っていればいいと思います。

もしくはCDlgにSampleAppへのポインタを持たせてSampleApp側でbitmapのhandleを受け取
るpublic関数を用意するとか。


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

>他のクラスから参照したい、ということですよね?

はい。そうなんです。

>SampleAppがCDlgへのポインタを持っていて
とは?void *?を?

SampleAppは
BOOL CSampleApp::InitInstance()
{
AfxEnableControlContainer();
Enable3dControlsStatic();

     WORD wErrorCode;
CString strErrorMsg;
#ifdef _AFXDLL
Enable3dControls(); // 共有 DLL 内で MFC を
使う場合はここをコールしてください。
#else
Enable3dControlsStatic(); // MFC と静的にリンクする場合はここをコール
してください。
#endif
    
    CCCameraSampleDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
と続きます。

>CDlgがbitmapのhandleを返すpublic関数を持っていればいいと思います。

bitmapのhandleを返すはどのようにすればいいのでしょう?すみません・・。教えてく
ださい。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

>>SampleAppがCDlgへのポインタを持っていて
>とは?void *?を?
「CDlgへのポインタ」と言ったら「CDlg*」に決まってるじゃないですか。

>>CDlgがbitmapのhandleを返すpublic関数を持っていればいいと思います。
>bitmapのhandleを返すはどのようにすればいいのでしょう?
「~を返す関数」と言ったら普通リターン値の型の事を意味しますよね。引数で返しても
いいですが。


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

環境は VC++6.0,MFC,win98 です。
ダイアログベースアプリケーションで
画像を取得して2値化→描画とゆう流れのプログラムにしました。
(この処理は全てCDialogで行っています)
この2値化したデータを
CWinAppにメモリから読み込むという処理のプログラムを書きたいのです。


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

なぜ、CWinAppでやる必要があるかがわからないのですけれど。
メモリから読み込むと言うのも良く分からないし。
メモリには既にあるわけですから、参照するだけですよね。
CWinAppでいったい何がしたいのでしょう。
ファイルに書き出したいとか、具体的にあげた方がレスもつきやすいかと。

そもそも、ビットマップを握っているCDialogクラスというのは、
CWinAppのInitInstanceの中でローカルにインスタンス化しているダイアログなのでは?
ならば、CDialogクラスから派生した自分のクラスの中でpublicなメンバー変数として
持たせれば、難なく参照できるはずでは?

基本的に情報を小出しにしすぎです。
環境周りの情報は勿論の事、出せる情報は最初の段階で出来るだけ提示しましょう。
無駄なやり取りが増えるだけで話がちっとも進みません。


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

CDialogのほうのhBitmapをHANDOLE hBitmapと宣言したら
>'void*' から非 'void' 型への変換には明示的なキャストが必要です。
というコンパイルエラーがでました。
これはどうやって解決したらいいでしょうか?
教えてください。
お願いします。


返信引用
はち
 はち
(@はち)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

値が割り当てられていないローカルな変数 'hBitmap' に対して参照が行われました。
とは・・・?


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

>>'void*' から非 'void' 型への変換には明示的なキャストが必要です。
>というコンパイルエラーがでました。
>これはどうやって解決したらいいでしょうか?
本当にそのソースで(論理的に)正しいのか確認してください。
正しいのであれば、エラーメッセージで指示されているように明示的にキャストしてくだ
さい。

>値が割り当てられていないローカルな変数 'hBitmap' に対して参照が行われました。
>とは・・・?
文字通り、です。参照は値を割り当てた変数で行いましょう。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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