流れるようなフェードインとフェードアウト

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 14年前
連絡を取る:

流れるようなフェードインとフェードアウト

#1

投稿記事 by YYSS » 14年前

画像を左から右に流れるようにフェードインとフェードアウトを行うことって可能でしょうか?

言葉だと説明しづらいのですが、言いたいのは・・・

00000 ←画像 : 0が輝度0% 3が輝度100% 数値が大きいほど明るい

10000

21000

32100

33210

33321

33332

33333

一定時間後

23333

12333

01233

00123

00012

00001

00000

わかりにくくてすみません;;

こんな感じで、スタッフロールとかの文字表示を流れるように表したいのです。
ただのフェードインとフェードアウトではなく、ちょっと凝ったことがしたいと思ったので

加算合成を使って表現しようとしたのですが、うまくいかなかったので;;


助言をお願いします


~開発環境~
○Windows Vista Home Premium SP2
○Visual C++ 2010 Express
○DXライブラリ使用

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 流れるようなフェードインとフェードアウト

#2

投稿記事 by h2so5 » 14年前

つDrawBlendGraph

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: 流れるようなフェードインとフェードアウト

#3

投稿記事 by Dixq (管理人) » 14年前

YYSSさん

こんにちは。
文字を移動させるんじゃなくて、輝度が移動するということでよかったでしょうか?
背景はとまったままなんでしょうか?
止まった背景をラインごとに輝度を変化させてグラデーションをかけるサンプルをつくってみました。

http://dixq.net/movie/gradation_sample.mp4
(動画)

プロジェクトはこちらに用意しました。
http://dixq.net/zip/gradation_sample.zip

ソースコードは輝度設定部分で何やってるかわかりにくいかもしれませんが、
要するにSetDrawAreaで一ラインずつ描画エリアをセットしては、SetDrawBlendModeでアルファ値をセットしていきます。
全ライン書き終わったら、countを動的に変えて、セットするαを時間軸で変化させているだけです。

似たような事をすればぐにゃぐにゃさせることも簡単です。
http://dixq.net/sm/d5.html

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: 流れるようなフェードインとフェードアウト

#4

投稿記事 by Dixq (管理人) » 14年前

もし、文字の所だけに凝ったグラデーションをかけたいなら、マスクを使います。
例えばこのようなエフェクトです。

http://dixq.net/movie/AerobeatEffect.mp4

これは文字の中をキラッとさせる為にマスクを使った処理をしています。
DXライブラリの公式リファレンスを見れば使い方が書いてあります。
やりたいのがどちらかわかりませんが、参考になればどうぞ。
分からないことがあれば聞いて下さい。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: 流れるようなフェードインとフェードアウト

#5

投稿記事 by MoNoQLoREATOR » 14年前

DXライブラリのDrawBlendGraph関数を使ったサンプルを作りました。
下記サイトよりダウンロードしてください。(ブレンド用の画像が重要なので)

http://www1.axfc.net/uploader/Sc/so/205205.rar&key=mixc


オレンジの四角形を描画しているのは、黒色で塗りつぶしてるわけではないことを表すためです。

一応ソースは張っておきます。

コード:

#include "DxLib.h"

int blend_gh;
int normal_gh;
int i;
int state;
int black_gh;

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
	ChangeWindowMode(TRUE);				
	if(DxLib_Init() == -1) return(-1);
	SetDrawScreen(DX_SCREEN_BACK);
	
	
	// ブレンド用画像を読み込む
	blend_gh = LoadBlendGraph("blend.png");
	
	//通常画像の読み込み
	normal_gh = LoadGraph("02.png");
	
	//黒い画像の読み込み
	black_gh = LoadGraph("black.png");
	
	
	
	while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
         	ClsDrawScreen();
		
		

	//それぞれ 256 フレーム掛けて切り替え

		switch(state){
			case 0://フェードイン
			
		//あらかじめ画像を表示しておく
		DrawGraph(0,0, normal_gh, FALSE);
		
		//通常画像とブレンド用画像を合成して描画
		// (境界幅は255)
		DrawBlendGraph(0,0, black_gh, FALSE, blend_gh, i, 255) ;
		if(i < 255) i++;
		if(i==255) i = 0, state = 1;
		
			
			break;
			
			case 1://フェードアウト
		
		//オレンジボックスの描画
		DrawBox(100,20,200,60, GetColor(250,110,0), TRUE);

		//通常画像とブレンド用画像を合成して描画
		// (境界幅は255)
		DrawBlendGraph(0,0, normal_gh, FALSE, blend_gh, i, 255) ;
		if(i < 255) i++;
		
			break;
		}

		ScreenFlip() ;
	}

	DxLib_End() ;
	return 0 ;
}
もし文字列でこれを行いたい場合は、一度GetDrawScreenGraph関数を使ってその領域を画像として保存し、その画像ハンドルを取得してください。

アバター
YYSS
記事: 125
登録日時: 14年前
連絡を取る:

Re: 流れるようなフェードインとフェードアウト

#6

投稿記事 by YYSS » 14年前

いろんなやり方を教えてくださってありがとうございます。

イメージ的には、MoNoQLoREATORさんが教えてくれたようなことがやりたかったのです。

でも、Dixqさんが教えてくれた方法も、
背景に小細工を加えたり、ラスタースクロールみたいな表現をしたいときに役立てそうなので、ありがたく参考にさせていただきます。


とりあえず、今から実戦したいと思います。
また分からないことがあったら質問しますので、助言をお願いします

閉鎖

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