開発環境 Windows XP Visual C++6.0 SDIです。
画像処理ソフトを作成していてメモリ上のビットマップファイルを表示するところまで
はできました。
そこで質問ですが、ビットマップデータを画面に表示後に
マウスメッセージのLOWORD(LPARAM)とHIWORD(LPARAM)から得られる座標とBitマップ画像
の座標を対応させるにはどのような計算手法を用いればよろしいでしょうか?
マウスで選択した範囲の画像データの平均値等を求めることが目的です。
表示手法は下記のとおりです。
(1)Size_X,Size_Yの32bitDIB画像を作成するためDIB情報を作成
(2)バッファ(m_data)を確保し、画像データを作成
(3)StretchDIBitsで表示(拡大縮小に対応)
考え方のヒント等でも結構ですのでアドバイスをお願いいたします。
---------------------------------------------------
//DIBの情報を設定する
bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth=m_SizeX;
bmpInfo.bmiHeader.biHeight=-m_SizeY;
bmpInfo.bmiHeader.biPlanes=1;
bmpInfo.bmiHeader.biBitCount=32;
bmpInfo.bmiHeader.biCompression=BI_RGB;
DWORD* m_data = new DWORD[m_SizeX * m_SizeY];
//画面を表示
StretchDIBits
(hdc,0,0,m_SizeX,m_SizeY,0,0,m_SizeX,m_SizeY,m_data,&bmpInfo,DIB_RGB_COLORS,SRC
COPY);
--------------------------------------------------------
アドバイスありがとうございます。
今日一日HPと書籍でいろいろ調べましたが問題解決にいたっていません。
ビットマップを扱う際の形式で
DDB,DIB,DIBSection の違いまでは理解できました。
DIBSecitonにして、GDI関数を使えばなんとかなるのでしょうか?
大変恐縮ですが、アドバイスをお願いします。
>マウスメッセージのLOWORD(LPARAM)とHIWORD(LPARAM)から得られる座標とBitマップ画像
>の座標を対応させるにはどのような計算手法を用いればよろしいでしょうか?
↑
本当にこれが目的であるならば、GDIもDIBの詳細な知識もいらない
>画像処理ソフトを作成していてメモリ上のビットマップファイルを表示するところまで
>はできました。
特に設定変えないかぎり
画像をどこに表示したのかと、マウスの現在位置は同じ方眼紙上にのってるようなもの
たとえば、
1:サイズ(100,100)の画像を、(10,10)の位置に拡大率100%で表示させ
る。
2:マウスの位置が(50,50)
この状況なら、画像上で(50-10,50-10)の位置にマウスがある
拡大縮小してるならそれを考慮すればいい。
rinさま
確かにおっしゃるとおりですね。
方眼紙上で考えればすべてうまくいくことがわかりました。
拡大縮小を含めて、rinさまから教えて頂いたやり方で座標を取得できました。
アドバイスありがとうございました。
あ、本当ですね。
良く読んだら、マウス座標と画像座標ですね。
これなら、難しいことは何もないですね。
失礼いたしました。