none
PictureControl上でのgifアニメ表示について RRS feed

  • 質問

  • VisualStudio2010で、MFCを使ってGUIを開発しています。
    画面上に配置したPictureControlにgifを表示させてアニメーションさせたいのですが、
    貼り付けたgifがアニメーションしません。
    処理は以下のように記述しています。
    (IDC_PIC → PictureControlのリソースID)

    {
        CStatic *pStatic;
        CImage img;
        img.Load(_T("a.gif"));
        pStatic = (CStatic *)GetDlgItem(IDC_PIC);
        pStatic->SetBitmap(img);
    }

    解決法がお分かりの方、教えて頂けますと助かります。
    よろしくお願い致します。

    2010年10月21日 5:08

回答

  • CImageは読み込み時にDIBに変換するため、GIFのFrame情報は失われてしまいます。

    また、Static Controlは、gifを受け付けません。

     

    従って、代替手段を検討する必要があります。

    例えば、以下の手段があります。

      1.定期的に描画を行う自作のControlをつくる

      2.GDI+ を利用する

        Image::Image()でgif Fileを読み込む

        Image::GetFrameCount(Gdiplus::FrameDimensionTime)でFrame数を取得する

        Image::SelectActiveFrame(Gdiplus::FrameDimensionTime)で描画するFrameを選択する

        Graphics::DrawImage()で描画する

      3.各Frameの表示時間

        Image::GetPropertyItem(PropertyTagFrameDelay)に各Frameの表示時間が入っている

    • 回答としてマーク hagunsei 2010年10月22日 4:29
    2010年10月21日 8:35

すべての返信

  • CImageは読み込み時にDIBに変換するため、GIFのFrame情報は失われてしまいます。

    また、Static Controlは、gifを受け付けません。

     

    従って、代替手段を検討する必要があります。

    例えば、以下の手段があります。

      1.定期的に描画を行う自作のControlをつくる

      2.GDI+ を利用する

        Image::Image()でgif Fileを読み込む

        Image::GetFrameCount(Gdiplus::FrameDimensionTime)でFrame数を取得する

        Image::SelectActiveFrame(Gdiplus::FrameDimensionTime)で描画するFrameを選択する

        Graphics::DrawImage()で描画する

      3.各Frameの表示時間

        Image::GetPropertyItem(PropertyTagFrameDelay)に各Frameの表示時間が入っている

    • 回答としてマーク hagunsei 2010年10月22日 4:29
    2010年10月21日 8:35
  • なるほど、Static Controlではgifを扱う事は出来ないのですね。
    複数の画像を自分で切り替えながら表示する等、代替手段を検討してみます。
    ご回答頂き、ありがとうございました。

    2010年10月22日 4:29