DirectDrawのカラーキーについて

解決


タンク  2002-12-18 17:15:57  No: 76694  IP: [192.*.*.*]

DirectDrawで透過色のカラーキーを
SetColorKeyメソッドを使って設定したのですが、
うまく転送されません。

Dim C As DDCOLORKEY
C.high = RGB(255,0,255)
C.low = RGB(255,0,255)

Surface.Surface.SetColorKey DDCKEY_SRCBLT, C

とやって、紫の部分を透過させたいのですが、うまくいかないのです。
黒を指定したときは透過されるので、色の入力がRGBだといけないのではないかと思うのですが、どうすればいいでしょうか?

編集 削除
上流 美咲  2003-01-27 17:36:59  No: 76695  IP: [192.*.*.*]

DirectX関係でRGB関数は使えません。
というよりも正確な値が返るのが白と黒だけなんです。
かわりにDirectX7オブジェクトの持つCreateRGBメソッドを使えばうまくいきますよ

編集 削除
神流美咲  2003-01-29 19:21:09  No: 76696  IP: [192.*.*.*]

すみません。違う理由がある、というかむしろそっちの確率の方が高いです。
もし16bitカラーを使用していた場合DirectXはカラー情報も16bitで扱います(RGB関数は24bitです)また32bitの場合は32bitで扱われます。つまり普通のRGB関数もCretaeRGBも役に立たない場合があるということです。ビットマップから色の情報を取得し自らでどこからどこまでのbitがどの色の情報かを見極めていろ情報を作成する関数を作る必要があります。
一応以下がサンプルです。以下のサンプルは緑の要素が6bitと考えた場合ですが

Public Function Get16BitRGB(R As Long, G As Long, B As Long)
    Get16BitRGB = R / (255 / 31) * 2048 + G / (255 / 63) * 32 + B / (255 / 31)
End Function

編集 削除
タンク  2003-02-05 17:39:27  No: 76697  IP: [192.*.*.*]

ありがとうございます!
サンプルを使用してカラーキーを設定したところ
成功しました。

レス遅れてすいません。

編集 削除