DWORD型の作成(?)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

DWORD型の作成(?)

#1

投稿記事 by rozeo » 11年前

こんばんは、rozeoです。

この前DIBSctionで質問させていただいたんですが、問題に気づきました。

自分はファイルから16進数値(00〜FF)読み込みそれをピクセル列に格納してたんですが、思ったら色
代入って 0x00ff0000 ←みたいな感じなのわすれてました

そこで質問なんですが。
ファイルから読み込んだRGB、3つの値から 0x〜の形式の値を作成するってことはできますか?

さらに追加で質問です。

コード:

for( int i = 0;i < 1000;i++ ){
    for( int k = 0;k < 1000;k++ ){
        bPixelBits[i + k*1000 ] = 0x00ff0000;//bPixelBitsはLPWORD型。CreateDIBSctionの時に領域確保
    }
}
で、ファイルから読み込まず、一定 値でデータを格納してるんですが、なぜかブレークポイントでみたときに格納される値が 0x00ff0000 ではなく 0x00ab0000という値になってしまってます。
これはバグでしょうか?正常でしょうか?

回答よろしくお願いします。

dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

Re: DWORD型の作成(?)

#2

投稿記事 by dic » 11年前

http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DIB.html
リンク先の真ん中あたりの 各構造体の定義 というところを読んでみてはいかがでしょうか?

//追加
色の情報の型が LPWORD というのは、どこの情報を参考にされているのでしょうか?

RGBQUAD構造体をよく見てください。
構造体、マクロはわかりますか?

//補足
カラーパレットを使わない場合がありますね。失礼しました。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: DWORD型の作成(?)

#3

投稿記事 by へにっくす » 11年前

rozeo さんが書きました:3つの値から 0x〜の形式の値を作成するってことはできますか?
確か、RGBマクロが使えたような。
●Win32API(C言語)編 第13章 色の指定
rozeo さんが書きました:

コード:

for( int i = 0;i < 1000;i++ ){
    for( int k = 0;k < 1000;k++ ){
        bPixelBits[i + k*1000 ] = 0x00ff0000;//bPixelBitsはLPWORD型。CreateDIBSctionの時に領域確保
    }
}
0x00ff0000ってことは4byte、DWORDですね。LPWORDはWORD(=2byte)のポインタですよ。
DIBSectionを作る
上記のリンク先にもあるようにbPixelBitsはLPWORDでなく、LPDWORDですよ。bPixelBitsはLPDWORDですか?
0x00ff0000が0x00ab0000になってるってことはバグでしょう。
バグとは、思った通りの動きをしない、すべての現象のことをいいます。
その、0x00ab0000となっていた箇所は、どこで確認したのでしょうか?for文を抜けてすぐですか?
別の場所で確認したのであれば、その箇所を示してください(ソースが足りません)。
written by へにっくす

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: DWORD型の作成(?)

#4

投稿記事 by rozeo » 11年前

LPWORDではなくてちゃんとLPDWORD型( DWORD * )でした。すいません。

ブレークポイントは内側forのかっこの部分です。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: DWORD型の作成(?)

#5

投稿記事 by rozeo » 11年前

へにっくす氏のページみましたが、COLORREF型ってtypedefされたDWORD型なんですね…初めて知りました。

なのでRGBマクロ使ってやってみたところ、うまく表示できました。
いままでうまく表示されていませんでしたが、やはり代入値がいけなかったようですね…

ありがとうございます。解決致しました。

閉鎖

“C言語何でも質問掲示板” へ戻る