質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.19%

画像のフェードインのやり方について

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,341

wug

score 13

リソースとして読み込んだLogo.bmpをフェードインしながら画面に表示させたいのですがどうやればいいでしょうか?
//ロゴ画面
//-----------------------------------------------------------------------------
#include  "Task_Logo.h"
#include  "Task_Brand.h"

namespace  Logo
{
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//リソース
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    //-----------------------------------------------------------------------------
    //安全の為に、追加したリソース用の変数はここで予めゼロクリアしておく
    Resorce::Resorce( )
    {
        this->img  =  nullptr;
    }
    //-----------------------------------------------------------------------------
    //リソース読み込みはここに書く
    bool  Resorce::Initalize( )
    {
        this->img  =  DG::Image::Create("./data/image/Logo.bmp");
        return  true;
    }
    //-----------------------------------------------------------------------------
    //リソース解放はここに書く
    bool  Resorce::Finalize( )
    {
        this->img.reset();
        return  true;
    }
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//本体
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    //-----------------------------------------------------------------------------
    //「初期化」タスク生成時に1回だけ行う処理
    bool  Object::Initialize(  )
    {
        __super::Initialize(defGroupName,  defName,  true);    //スーパークラス初期化

        //固有情報の初期化
        ge->dg->EState( ).param.bgColor  =  ML::Color(1,1,1,1);
        return  true;
    }
    //-----------------------------------------------------------------------------
    //「実行」1フレーム毎に行う処理
    void  Object::Step( )
    {
        if( ge->in1->Button_Down(DI::But::○) ){
            this->Kill( );    //自分自身に消滅申請
        }
    }
    //-----------------------------------------------------------------------------
    //「2D描画」1フレーム毎に行う処理
    void  Object::Draw2D_BF( )
    {
        ML::Box2D  draw(0,  0,  1920,  1080);
        ML::Box2D  src (0,  0,  1920,  1080);

        draw.Offset(0, 0);
        res->img->Draw(draw, src);
    }
    //-----------------------------------------------------------------------------
    //「終了」タスク消滅時に1回だけ行う処理
    bool  Object::Finalize( )
    {
    //固有情報の解放

    //その他・後処理
        //配下の削除
        //引き継ぎタスクの生成
        auto  next  =  Brand::Object::Create(  );
        ge->PushBack(next);
        return  true;
    }
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//本体・リソース双方の基本的に変更不要なメソッド
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    //-----------------------------------------------------------------------------
    //タスク生成窓口
    Object::SP  Object::Create( )
    {
        Object::SP  ob  =  Object::SP(new  Object( ));
        if(ob){
            ob->me  =  ob;
            if( ob->B_Initialize( ) ){
                return  ob;
            }
        }
        return nullptr;
    }
    //-----------------------------------------------------------------------------
    bool  Object::B_Initialize( )
    {
        res  =  Resorce::GetInst( );                        //リソース準備
        return  this->Initialize( );
    }
    //-----------------------------------------------------------------------------
    Object::~Object( ){        this->B_Finalize( );    }
    bool  Object::B_Finalize( )
    {    
        auto  rtv = this->Finalize( );
        res.reset( );
        return  rtv;
    }
    //-----------------------------------------------------------------------------
    Object::Object( ){    }
    //-----------------------------------------------------------------------------
    Resorce::WP  Resorce::instWPtr;
    //-----------------------------------------------------------------------------
    Resorce::SP  Resorce::GetInst( )
    {
        if(!instWPtr.expired( )){
            return  instWPtr.lock( );    
        }
        else{
            SP  sp  =  SP(new  Resorce( ));
            sp->Initalize( );
            instWPtr  =  sp;
            return  sp;
        }
    }
    //-----------------------------------------------------------------------------
    Resorce::~Resorce( ){    this->Finalize( );    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

初心者なので、誤りがあったらゴメンなさい…


まず、画像をフェードインさせるための基本的な処理方式としては
  • 背景と同じ色の四角形を被せてその透明度を「不透明→透明」と変化させる
  • 画像そのものの輝度を「暗→明」と変化させる
などがあるようですが、一般的には後者の「画像そのものの輝度」を変化させる方式が採用されているようです。


では、画像の輝度をどうやって変化させるか、というと、全てを自らC言語で記述することも可能なのでしょうが、普通はグラフィックAPIを使用します。その代表例は下記になります。
  • Windows なら DirectX
  • クラスプラットフォーム なら OpenGL


次に、APIを直接呼び出すことももちろん出来ますけれども、様々なグラフィックライブラリが開発されており、目的に合わせて選んだライブラリを経由してAPIを操作するのが一般的なようです。

Windows環境(DirectX)で **DXライブラリ** を使用した実装例が こちら に掲載されていました。

以上、ご参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

DG や ML が何なのか分からないため難しいですが…

ロゴを「移動する」プログラムは書けるでしょうか?
毎フレームごとに、ロゴの位置を計算しながら描画を行います。
例えば、時刻1000~2000の間に、ロゴのx座標を0~1920に移動させるなら、
x = ({現在の時刻} - 1000) * 1920 / (2000 - 1000) で求められます。

それができれば簡単です。
毎フレーム、例えば透明度を計算しながらロゴを描画すればOKです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る