ページ 11

GraphFilterの階調反転について

Posted: 2012年9月30日(日) 19:06
by コレジャナイ
再び失礼致します。

絵を描画した後、上書き階調反転した絵を重ね、白くさせたいと思っていたのですが、上手くいきません。
LoadDivGraphで作成されたグラフィックハンドルを用いているのですが、添え字が0の絵以外がバグを起こしてしまいます。
(動作が止まる訳ではなく、描画した絵が歪な絵に置き換えられて描画されてしまいます)

以下該当部分のソースを貼ります

コード:

DrawGraph( xの座標, yの座標, GHcharacter_p[number],TRUE);
SetDrawBlendMode(DX_BLENDMODE_ADD , 255);
GraphFilter( GHcharacter_p[number], DX_GRAPH_FILTER_INVERT );
DrawGraph( xの座標, yの座標, GHcharacter_p[number],TRUE);
GraphFilter( GHcharacter_p[number], DX_GRAPH_FILTER_INVERT );
GHcharacter_pは描画対象のキャラクターに応じてグラフィックハンドルを挿入する関数からポインタ形式で受け取ってきたものです。

↑のコードと全く同じでグラフィックハンドルのみポインタを経由してないものを使用した所、歪な色の絵は表示されませんでしたが、透過部分も一緒に白くなってしまいました。
(添え字が0の時のみ正常)

GraphFilterが二つ置いてあるのは、一度絵の色調を反転した後、色調を元に戻そうという意図です。


抽象的な質問となってしまい申し訳御座いません。

Re: GraphFilterの階調反転について

Posted: 2012年9月30日(日) 19:08
by コレジャナイ
[追記]
先程のコードの終わりにSetDrawBelendMode(DX_BLENDMODE_NOBLEND, 0 );を付け忘れていましたので追記致します。

Re: GraphFilterの階調反転について

Posted: 2012年9月30日(日) 21:15
by softya(ソフト屋)
この場合、SetDrawBlendModeのDX_BLENDMODE_INVSRCを使えるのでGraphFilterを使うべき場面ではありません。
GraphFilter()でも出来ないわけじゃないと思うので問題は別原因かも知れません(DXライブラリ自体のバグなど)があえて遅くなりそうな物を使う必要はないと思います。

Re: GraphFilterの階調反転について

Posted: 2012年9月30日(日) 23:10
by コレジャナイ
あぁ、なるほど
加算モードと一緒に使えないからと選択肢から除外してましたが、書き方を変えれば良いだけでしたorz

無事表示出来ました。
有難う御座いますm(_ _)m

Re: GraphFilterの階調反転について

Posted: 2012年9月30日(日) 23:29
by softya(ソフト屋)
ふと思いついたのは、GHcharacter_pで扱っていたのはLoadDivGraphで読み込んでいたものでしょうか?
だとしたら、LoadDivGraphで読み込んだものは内部的には一枚の絵のはずなのでハンドルごとにGraphFilterを掛けるとおかしくなるのかも知れませんよ。

Re: GraphFilterの階調反転について

Posted: 2012年10月01日(月) 03:25
by コレジャナイ
>>ソフト屋さん
おっしゃる通りLoadDivGraphで取り込んだもので、これが原因なのでしょうか。
(別の場所で既にデバッグはしていたのですが、透過部分含めて全て白くなってしまっていたので・・・)

GraphFilterの引数でグラフィックハンドルのアドレスを渡す事は出来ませんよね?
GraphFilterのリファレンスにもLoadDivGraphについての記載が無いですし、仮にLoadDivGraphで透過情報が扱えないとなるとかなり使い辛いかもしれません・・・。
(ほとんどの画像がLoadDivGraphで取り込んでますので)

無理をして使うべき関数では無い様ですから、要らぬ心配な気もしますが。

[追記]
私信を送らせて頂きました。