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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

9080閲覧

C++のプログラムでGIFアニメを再生したい場合

metier

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

2クリップ

投稿2014/09/16 04:42

C++のプログラムでGIFアニメを再生したい場合、Gdiplusで下記のようなコードで再生ができてます。

呼び出し側
InsImageGIF(_TEXT("anime.gif"),mainHwnd,0,0);

関数
int InsImageGIF(TCHAR* ImgSrc, HWND DistHwnd,int iStartX,int iStartY)
{
HDC hdc;
HDC mhdc;
HBITMAP hbp;
BITMAP bp;

PAINTSTRUCT ps; GUID guid; hdc = GetDC(DistHwnd); Graphics MyGraphics(hdc); Image gifimage(ImgSrc); gifimage.GetFrameDimensionsList( &guid, 1); int frame_cnt = gifimage.GetFrameCount(&guid); for (int i = 0; i< frame_cnt; i++) { // フレーム数分くりかえす gifimage.SelectActiveFrame(&guid, i); MyGraphics.DrawImage(&gifimage, iStartX, iStartY ); Sleep(1000); // 1秒まつ } EndPaint(DistHwnd,&ps); ReleaseDC(DistHwnd,hdc); return 0; // 終わるまで返ってこない

}

この場合、呼び出し側はアニメが終わるのを待って次に進むしかないため、途中で止めたり、音声を挿入したりできないです。
たとえば、呼び出しstartで開始、呼び出しstopで終了するなど、
C++で、1回呼び出しただけで関数から帰ってきて自動で再生できるようにするには、どうすればよいでしょう?

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

C++言語の場合、関数の途中で「処理をOS側に返す」ような処理を簡単に書くことはできませんので、sleepで待機させる形ではなく、

  • 最初の呼び出しではSetTimerなどでタイマーで呼び出すようにセットだけして、タイマーのコールバックごとに1枚進める
  • gifアニメを進めるスレッドを別に立てる

などの手法が必要になります。

投稿2014/09/16 07:41

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問