VC6.0MFCによる画像処理の質問です。 – プログラミング – Home

VC6.0MFCによる画像処理の質問で...
 
通知
すべてクリア

VC6.0MFCによる画像処理の質問です。


ひろえ
 ひろえ
(@ひろえ)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

初めて質問をさせて頂きます。

【開発環境】WINDOWS XP,Visual C++ 6.0 MFC
【目的】VBから送られた画像データ(bitmapファイル)をMFC DLLで
    「getPixcel」して画像のRBG値をとりたい。
【分からないこと】画像の受け取り方(と思います)

【質問内容】「ビットマップファイルのデータを受け取り、その
データからRGB値を取るという」というところでどうしても困って
しまい質問をさせて頂きます。

MFCのCDCクラスに GetPixcelというメンバ関数があったのでそれを
使ってRBG値が取れればと思ったのですが、取得している値がどれを
とってもおかしな値になってしまい、結論として「ビットマップデータ
がうまく渡されていない」と考えております。そこから色々なサイト
MSDNなど見て回ったのですが、原因っぽいのがあるサイトがなく
こちらにて質問をさせて頂こうと思いました。

コーディング内容は以下です。

---------------------ここから----------------------------
void __stdcall getRGB(CDC *Test_BMP)
{
COLORREF color; //RGB値を格納したい変数
int r,g,b // RGB値をそれぞれ入れたい変数

color = Test_BMP->GetPixel(X,Y); //int X,int Yは取りたい点の座標で
す。

r = GetRValue(color); //ここのR値(取れる値は255のみ)
g = GetGValue(color); //ここにG値(取れる値は255のみ)
b = GetBValue(color); //ここにB値(取れる値は255のみ)

}
---------------------ここまで----------------------------
正しいRGB値を取得する方法をご存知の方いらっしゃいましたら
教えて頂ければと思います。宜しくお願い致します。


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

肝心のBitmapをどうやって引き渡しているのかが全くかかれていません。
これでは、正しく引き渡されているのかの判断は不可能です。
また、突然出てきているCDC* Test_BMPに関しても出所が分からないので
なんとも言いかねます。

CDCのポインタをビットマップのポインタという意識でいるのであれば、
多分勘違いしています。
CDCはあくまでもデバイスコンテキストを取り扱う為のクラスであって
ビットマップを扱う為のクラスではありません。
GetPixelしているCDCに引き渡されたと言うビットマップが選択された状態で
初めて意味があると思います。
実際には別にロードしておいてメモリDCを作成後、メモリDCに選択する
という作業が必要になると思います。


返信引用
ひろえ
 ひろえ
(@ひろえ)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

PATIOさん返信ありがとうございます。

もう少し詳しくなるように追加で書いてみます。

【VB側から】------------------------------------------------------------
Private Declare Sub getRGB Lib testDLL.dll (ByVal Test_BMP As Bitmap)
このような感じでVB側からtestDLLに対して、値渡しでTest_BMPを渡しています。

マネッジコードで書いた時は、これでうまくいっていました。。。

で、実行したいところで
Call getRGB(Test_BMP)
という呼び出し方をして、DLLでRGB値を取りたいと思っています。
-------------------------------------------------------------------------

ただ、PATIOさんが言うようにどうやらデバイスコンテキストを扱うクラスという
考え方が間違っていたようなので、今度はメモリDCを作成してみようと思います。


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

えーと、
Private Declare Sub getRGB Lib testDLL.dll (ByVal Test_BMP As Bitmap)
で引き渡した時ってVC側では何で受け取れるんだろ?
VCでビットマップを扱うクラスはCBitmapクラスですけれど、
ちょっと検討がつかないですね。
この辺は、VBに詳しい方に譲ります。
私自身はVBを殆ど使わないのでこの辺の繋ぎは分からないのです。
逆に言うとVBとVCで受け渡しをするようなプログラムを作りたいのであれば、
この引き渡した時の挙動をきちんと把握している必要があると言う事になります。
この辺の事が説明されているような書籍があると良いのですが、
私はあいにく該当する本を知りません。
御存知の方がいらっしゃったら教えてあげてください。


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

VBとはVB.NETでしょうか?(VB2002,2003,2005)

VB.NETのBitmapクラスとMFCのCBitmapは直接代入できません。
よってうまくいくはずはないのです。

つうか、VBからつかうDLLを想定しているのであれば、MFCのクラスを
インタフェース(引数や戻り値)にするのはありえません。
# MFCのバージョンが違えばVC++同士でも使えなくなる可能性がある。

Bitmapハンドルを受け渡すとかCOMオブジェクトを使うとかそういうやり方
でないとうまくいかないでしょう。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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