画像部分を真っ白にする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぬるぽ

画像部分を真っ白にする方法

#1

投稿記事 by ぬるぽ » 15年前

DXライブラリで、
画像部分を真っ黒にする方法は

SetDrawBright( 0 , 0 , 0 );
//画像を表示
SetDrawBright( 255 , 255 , 255 );

と、輝度を指定してあげれば出来るのですが、
画像部分を真っ白にする方法が分かりません。
そのようなこと可能なのでしょうか?
もし知っている方がいましたら教えてください。
よろしくお願いします。

ぬるぽ

Re:画像部分を真っ白にする方法

#2

投稿記事 by ぬるぽ » 15年前

不可能ということで解決にしたいと思います。

白い時空

Re:画像部分を真っ白にする方法

#3

投稿記事 by 白い時空 » 15年前

解決になってしまいましたが…

画面を真っ白にするなら
白をαブレンドで描画すればいいんじゃないですか?

DrawBox( 0, 0, 640, 480, GetColor(255,255,255) , TRUE);//画面全体を白で描画
SetDrawBlendMode( 0, DX_BLENDMODE_ALPHA );//αブレンドの値を設定
//画像を表示
SetDrawBlendMode( 255, DX_BLENDMODE_NOBLEND);//元に戻す

多分これでいいと思います。

ぬるぽ

Re:画像部分を真っ白にする方法

#4

投稿記事 by ぬるぽ » 15年前

ああ、すみません。強調すればよかったですね。
画面全体を真っ白にするのではなく、
画像自体をプログラムで真っ白に変えてみたいのです。

添付参照。

白く加工したものを表示する方法もありますが、
メモリが勿体ないので……

シエル

Re:画像部分を真っ白にする方法

#5

投稿記事 by シエル » 15年前

加算ブレンドしまくるとか

へろりくしょん

Re:画像部分を真っ白にする方法

#6

投稿記事 by へろりくしょん » 15年前

DXライブラリはさっぱり分かりませんが。

画像のビットブロックを直接いじるとかは出来ないのでしょうか。

もしくは、画像からマスクなりリージョンなりを作って塗りつぶすとか。


>白く加工したものを表示する方法もありますが、
>メモリが勿体ないので……
png画像で640x480のサイズでも300kb程度ですよ。
そんなにケチるほどのメモリ量では無いと思いますが。

白い時空

Re:画像部分を真っ白にする方法

#7

投稿記事 by 白い時空 » 15年前

加算ブレンドと反転描画を組み合わせたらできました。

その方法ですが、反転画像を描画し、その後元画像を加算ブレンドで描画します。
そのため、2回描画する必要があります。
SetDrawBlendMode( DX_BLENDMODE_INVSRC, 255);//画像を反転させて描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_ADD, 255);//画像を加算ブレンドで描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255) ;//元に戻す
反転画像の色は(255-元画像)になるので、元画像と加算ブレンドすると、
元画像+(255-元画像)=255
となることを利用しました。 画像

ぬるぽ

Re:画像部分を真っ白にする方法

#8

投稿記事 by ぬるぽ » 15年前

>白い時空さん
おお、この発想はなかったです。
助かりました。ありがとうございました。

yamataka

処理軽減

#9

投稿記事 by yamataka » 15年前

「画面上の全ての弾と自機が接触しているかを計算する」
のと
「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
その弾と自機が接触しているかを計算する](判定範囲=10)
では、どちらの方の処理が軽いですか?

バグ

Re:処理軽減

#10

投稿記事 by バグ » 15年前

>>「画面上の全ての弾と自機が接触しているかを計算する」
>>のと

この処理は結局…

>>「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
>>弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
>>その弾と自機が接触しているかを計算する](判定範囲=10)
>>では、どちらの方の処理が軽いですか?

この処理と同意なのでは?
2段階に分ける意味が分からないのですが…?

yamataka

Re:処理軽減

#11

投稿記事 by yamataka » 15年前

まさかの二つとも同じですか。

一つ目は、画面上の弾全てを計算。
二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。
ということだったのですが、
まさか同じだったとは思いませんでした。

ありがとうございました。 画像

バグ

Re:処理軽減

#12

投稿記事 by バグ » 15年前

自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
ということは、結局全ての弾との距離を計算する訳だから、分けると二度手間なんじゃないかな…と思ったんです。

あぁ…でも、当たり判定の計算方法によってはそうとも言い切れないのかな?(^_^;)

シエル

Re:処理軽減

#13

投稿記事 by シエル » 15年前

>>二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。

まずこれを判定する時間が必要になるし、またあなたの当たり判定計算法がどうなのか
知らないので、何とも言えません。
実測が一番でしょう。

yamataka

Re:処理軽減

#14

投稿記事 by yamataka » 15年前

> 自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
いえ、自機と全ての敵弾の座標を大小関係(>,<)で判定して、(>,<は三平方の定理で距離を計算するより軽いと思ったので)
真だったら三平方の定理(だっけ?)で真だった敵弾との距離を計算して被弾しているか出します。 画像

ookami

Re:処理軽減

#15

投稿記事 by ookami » 15年前

どちらが速いかは処理系依存ですね。

> 判定範囲=10

くらいなら、
後者の前半部分、

「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら」

だけで判定するというのはいかがでしょう?

yamataka

Re:処理軽減

#16

投稿記事 by yamataka » 15年前

そうですか、やめておいた方がいいんですね。

バグさん、シエルさん、ookamiさん有り難うございました。

閉鎖

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