現在、C#で画面表示にワイプ(パラパラと画面が変わる)を作成しようと思ったのですが、あれはどういうアルゴリズムなのでしょうか?
http://tokyo.cool.ne.jp/sdl/img/ScreenEffect2.jpg
↑のように切り替わるワイプです。
No.3ベストアンサー
- 回答日時:
★最初に C# でグラフィックの描画方法をどの程度知っているのですか?
・ブラインドのフェードイン(ワイプイン)は画面を複数の高さに分割します。
たとえば 10 分割にしたとします。→ScreenEffect2.jpg に合わせ。
そのうちの1つに着目して
(1)中央位置から段々太くなるように『絵』をメモリバッファから画面(HDC)へ転送していきます。
(2)最初は Y 軸が中央位置、『絵』の高さが 1 ピクセルにします。
(3)続いて Y 軸を -1 にして『絵』の高さを 3 ピクセルにします。
(4)さらに Y 軸を -1 にして『絵』の高さを 5 ピクセルにします。
(5)上記を繰り返して分割した1つの絵の高さが 10 分割した1つの高さになったら繰り返し終了。
こんな感じですよ。ブラインドの場合は。
・これを実現するには最初『絵』=画像をメモリ上のバッファにすべてを描きます。
メモリ上とは、ダブルバッファ領域を用意してそこに描画する訳です。
・そして、メモリ上のダブルバッファ領域から順番に 10 分割した1つの領域を細いラインから
太いラインになるように Fill 関数などで実際の画面領域に転送します。
これを分割した 10 個分繰り返します。
・その後、ちょっとしたウェイトでも入れます。
ウェイト後はラインを少し太くした長方形領域をメモリ上から画面へ転送します。
これを繰り返す。下に擬似サンプルを載せます。
擬似サンプル:
int high = 32; ←10分割した1つの高さをセット
int posY = high / 2; ←中央位置なので÷2からスタート
int wide = 640; ←転送するラインの幅(ブラインドの横幅)
int size = 1; ←転送するラインの高さ(ブラインドの太さ)
do {
for ( int i = 0 ; i < 10 ; i++ ){ ←10分割なので 10
Fill( hDC,
0, (high * i + posY), wide, size, ←転送先(画面)
0, (high * i + posY), wide, size ); ←転送元(メモリ上)
}
Sleep( 100 ); ←100ms(0.1秒)のウェイト
posY -= 1; ←posY-- でもよい
size += 2;
} while ( size <= high );
解説:
・上記の擬似サンプルは C 言語風に記述しています。C# も似た感じですが Fill()、Sleep() の
関数名が多分違うはずです。Sleep() 関数は ms 単位でウェイトが入れられる関数です。
Fill() 関数も説明の都合上の関数名です。
上記では
Fill( 画面のデバイスコンテキスト,
横位置, 縦位置, 横サイズ, 縦サイズ, ←転送先(画面)
横位置, 縦位置, 横サイズ, 縦サイズ ); ←転送元(メモリ上)
という意味で使っています。→Win32 API では BitBlt 関数などを使う。
C# でメモリ上から画面に長方形領域を転送する関数に置き換えて下さい。
・以上。アルゴリズムという事なので上記を参考に。どうぞ。
No.2
- 回答日時:
★追記。
・調べたら、同サイトでソースのダウンロードが出来ますよ。
http://tokyo.cool.ne.jp/sdl/index7.html→『スクリーンエフェクト ScreenEffect』
これを元に C# で書き直してみれば良いのでは。
C言語で書かれていますので C 言語を知っていれば分かりやすいかと思いますが…。
どうでしょうか。
・『ワイプ表示』という表現がよく分かりませんが、描画されている『絵』を細い線で
段々に太くすれば『真っ黒』になりフェードアウトします。
・フェードインの場合は逆で『絵』を細い線で段々に太くして描画していけばできると
思います。前回のアドバイス通りにタイマーなどと組み合わせてゆっくりと細い線から
太い線になるように転送(描画)すればご希望通りの『ワイプ表示』の表現が出来ると
思いますよ。
・以上。
参考URL:http://tokyo.cool.ne.jp/sdl/index7.html
探していただいてありがとうございます。
ワイプ表示、種類がありますが、知りたいのは
上から順に線で埋め尽くされていくブラインド(ワイプイン)です。
以外に説明するのが難しいですね。
No.1
- 回答日時:
★最初に『ワイプ表示』の動作が分かりません。
・ブラインドのような画像は見ましたが、次はどうなる?
もうちょっと表示のステップを順に書いてくれないと分かりません。
あるいは動画などを何処かで見つけて『こんな感じ』っていう説明でないとね。
分かりません。
・でも、ちょっとしたアドバイスとしてタイマーを使って画像の一部を順番に
描画していけば良いと思います。タイマー間隔と単純なカウンタを用意して
そのカウンタから描画する部分を決めておけば、いろいろなスライドショーの
演出が出来ると思います。
・また、表示するウインドウのデバイスコンテキスト(画面)以外にもう一つメモリを
用意してダブルバッファでやり取りすれば変にちらつかず綺麗にもなります。
・以上。補足要求します。→もうちょっと詳しく『ワイプ表示』の仕組みを。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) raspberry pi 4でのopenmediavault6についての質問 1 2022/05/15 16:21
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- PowerPoint(パワーポイント) パワーポイント。2つの矢印のワイプ&消滅の順番に実施、これの繰り返し 2 2023/07/25 09:13
- その他(暮らし・生活・行事) 手話を本当に全て理解できてる人はいるんでしょうか? 3 2023/01/30 17:36
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- YouTube youtubeは画面と操作パネルが別々に表示されていたのに画面上にかぶるように表示されるようになった 1 2022/05/08 10:04
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TextBoxに文字を書いても表示さ...
-
Minecraft 統合版(PC)の描画距...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
CDC(LineTo)で描画した線を透過...
-
テキストボックス 自動スクロ...
-
NVIDIAのシェーダーキャッシュ
-
[VB.net] DataGridViewの列ヘッ...
-
スピードの速い描画
-
エクセルでガンチャートを作成...
-
win32api 画面のちらつき
-
google Colabでmatplotlibの描...
-
VC++プログラムをつかったBMP画...
-
CreateFontで回転させて印刷出...
-
VB.netでのライン描画方法がわ...
-
プシュボタンのテキストの色を...
-
ボタン形のラベル
-
ウインドウ描画のタイミングの...
-
GDI+で高速な描画
-
C++にて、塗りつぶされた円を描...
-
word
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
[VB.net] DataGridViewの列ヘッ...
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
C++にて、塗りつぶされた円を描...
-
UpdateData( FALSE); による文...
-
VC++プログラムをつかったBMP画...
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
画面全体を再描画させたい
-
OneNote 2010 文字と描画がずれる
-
VBAにGDI+を参照させる方法
-
Labelの文字をスクロールする際...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
テクスチャに半透明ポリゴンを...
-
Windowのちらつき防止
おすすめ情報