GetBValue()取得のエラー

[戻る]
dd 2010/02/02(火) 14:11:49
いつもお世話になっています、ddです。

下記の参照して、画像処理をやっています。
http://eternalwindows.jp/graphics/bitmap/bitmap11.html

COLORREF    crTransparent = RGB(0, 255, 0);

b = (BYTE)(GetBValue(crTransparent));
g = (BYTE)(GetGValue(crTransparent));
r = (BYTE)(GetRValue(crTransparent));

確認して以下の通りです
b=0
g=255'・’//ここで、余分が付いています。
r=0

g=255'・’の余分がどう取り除きますか。

よろしくお願いします。
環境:.Net2002 Windows XP

dd 2010/02/02(火) 14:14:27
いつもお世話になっています、ddです。

下記の参照して、画像処理をやっています。
http://eternalwindows.jp/graphics/bitmap/bitmap11.html

COLORREF    crTransparent = RGB(0, 255, 0);
BYTE   r, g, b;

b = (BYTE)(GetBValue(crTransparent));
g = (BYTE)(GetGValue(crTransparent));
r = (BYTE)(GetRValue(crTransparent));

確認して以下の通りです
b=0
g=255'・’//ここで、余分が付いています。
r=0

g=255'・’の余分がどう取り除きますか。

よろしくお願いします。
環境:.Net2002 Windows XP

Blue 2010/02/02(火) 14:23:38
>g=255'・’//ここで、余分が付いています。
どういうこと?
どうやって確認しているんでしょうか?

デバッグ時に見えるローカルウィンドウ?ウォッチ?自動変数?
型がBYTE(unsigned char)のとき対応する文字が値のところに表示されてるように見える
のですがそのことでしょうか?

BYTE c = 49;
だと

名前 値    型
c    49'1' unsigned char

と表示される。

aetos 2010/02/02(火) 14:56:30
BYTE の実際の型は unsigned char でしょうか。
char なので VC++ は文字列として扱おうとしますが、NUL 終端がないのでゴミがあるよ
うに見えます。
BYTE 自体にゴミがついているというわけではないので心配はいりません。

dd 2010/02/02(火) 15:53:54
Blueさん
ご返事ありがとう。

>名前 値    型
>c    49'1' unsigned char
そうです。
どういうことでしょうか。

よろしくお願いします。

dd 2010/02/02(火) 15:56:18
[[解決]]
aetosさん、
ご回答ありがとう。

>BYTE 自体にゴミがついているというわけではないので心配はいりません。
なるほど、わかりました。

皆さん、ありがとうございました。

Blue 2010/02/02(火) 16:03:19
>そうです。
>どういうことでしょうか。
単に、(親切にも)対応する文字を表示しているだけ。
0xff は対応する文字がないから '・' を表示している。

値はちゃんと0xff(=255)だから問題ない。

BYTE b = 255;
int n = b;

名前 値      型
b    255'・' unsigned char
n    255     int

aetos 2010/02/03(水) 17:28:54
や、俺間違ってましたね。お恥ずかしい。
訂正に感謝です。

古いスレッドには追加発言できません。