3

さて、これは解決されました。それが私の側の不具合だったのか、それともImageToolsをそれに応じて設定するのが面倒だったのかはわかりません。皆さんの回答に感謝します、そして彼らはおそらくすべてうまくいくでしょう。回答済みとしてマークした後は実際に機能しますが、方法は次のとおりです。

(クレジットはこれに固執するためにパトリックに行きます、そして彼のコードは以下に記されているように使われます。)

(また、何かを提出してくれた他のみんなにも感謝します。私の初心者があなたを怖がらせたらごめんなさい)

アニメーションGIFをwp77.1アプリで機能させるには、次の手順を実行します。

1)ImageToolsをダウンロードします(当時は最新バージョン(0.3)を使用していました)http://imagetools.codeplex.com/downloads/get/156530

2)ファイルを解凍し、[Bin> Phone]フォルダーで、すべてのdllファイル拡張子をwp7アプリフォルダーにスローします。他のファイル(xml / pdb)を追加する必要はありません。(*この手順は余分な作業であり、後でこれらの余分なdllを削除しますが、頭痛の種を減らすことができます。)

3)[ソリューションエクスプローラー]ウィンドウ>[参照]フォルダードロップダウンでwp7アプリへの参照を追加します。これを行うには、[参照]フォルダーを右クリックし、[参照の追加]をクリックして、dllファイルを参照します。このプロセスを繰り返します。(これらすべてのdllを参照することは、最終的には余分な2分の作業の1分ですが、コンパイル時にエラーが発生することはありません)

4)画像を追加するxamlページで、ヘッダーコードの上部にこれを追加します。

xmlns:it="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
xmlns:vm="clr-namespace:GifViewer.ViewModels"

注意:「GifViewer」をアプリケーション名に変更してください。

5)その同じページのすぐ下に、次のコードを追加します。

<phone:PhoneApplicationPage.DataContext>
    <vm:MainViewModel/>
</phone:PhoneApplicationPage.DataContext>

<Grid x:Name="LayoutRoot" Background="Transparent">
    <it:AnimatedImage  Source="{Binding AnimationImage}" />
</Grid>

注意:グリッドである必要はありません。何もする必要はありません。スタンドアロンでもかまいません。

6)承認された回答には、アプリに「ViewModels」という名前のフォルダーがあり、その中に「MainViewModel」という名前のカスタムクラスがあります。したがって、ソリューションエクスプローラーまたはデスクトップに、ViewModelsという名前のフォルダーを追加し、MainViewModelという名前のac#クラスページを作成します。それをそのフォルダーに移動し、ソリューションエクスプローラーを更新します。ファイルが表示されない場合は、ソリューションエクスプローラーヘッダーのすぐ下にある[すべてのファイルを表示]ボタンをクリックする必要があります。

7)以下の受け入れられた回答を使用して、「MainViewModel.cs」クラスページで、他のすぐ下に以下を追加します。

using ImageTools;
using ImageTools.Controls; 
using ImageTools.IO;
using ImageTools.IO.Gif;

8)受け入れられた回答はこのコードを使用しています。このコードをコピーするときは、「GifViewer」をアプリケーション名に変更し、gifのURIの場所も変更します。私の例では、「Gif」という名前のフォルダーがあり、その中に「explosion.gif」があります。ビルドアクションは、デフォルトでリソースとして保持できます。

namespace GifViewer.ViewModels {
    public class MainViewModel : DependencyObject {
        public MainViewModel() {
            Decoders.AddDecoder<GifDecoder>();
            Uri uri = new Uri("Gif/explosion.gif", UriKind.Relative);
            ExtendedImage image = new ExtendedImage();
            // either of these two method work.
            // Just remove the first / to switch
            //*
            image.LoadingCompleted +=
                (o, e) => Dispatcher.BeginInvoke(() => AnimationImage = image);
            image.UriSource = uri;
            /*/
            Stream stream = Application.GetResourceStream(uri).Stream;
            GifDecoder decoder = new GifDecoder();
            decoder.Decode(image, stream);
            AnimationImage = image;
            /**/
        }

        public static readonly DependencyProperty AnimationImageProperty =
            DependencyProperty.Register("AnimationImage",
                typeof(ExtendedImage),
                typeof(MainViewModel),
                new PropertyMetadata(default(ExtendedImage)));

        public ExtendedImage AnimationImage {
            get { return (ExtendedImage)GetValue(AnimationImageProperty); }
            set { SetValue(AnimationImageProperty, value); }
        }
    }
}

先に進んでコンパイルします。ロードできなかったことを示すランタイムエラーが発生する場合がありますが、アプリケーションを実行するとエラーが解消されます。

これでgifが再生されます。

9)不要なEXTRA dll参照の削除を開始します(2分間の追加作業の残りの1分間)。基本的に、参照したいのは次のとおりです。

ImageTools
ImageTools.Controls
ImageRools.IO.Gif 

ImageTools.Controlsは必要ないかもしれませんが、ファイルサイズは25kbのようなもので、正直なところ、削除した場合にgifを表示することができませんでした。

どうぞ!


私が尋ねた元の質問

アニメーションGIFをWP7アプリで再生しようとすると、最悪の頭痛がします。imagetoolsを使用していて、stackoverflow / webで現在の「ソリューション」を表示しているにもかかわらず、ドットを接続してこれを実現することはできません。

私の問題の概要を以下に示しますが、参考までに次 のことを確認しました。Silverlighthttp://blog.naviso.fr/wordpress/?p=733を使用してWP7アプリケーションでGIFを表示する

では、実際にこの爆破されたものを設定して、wp7アプリでアニメーションGIFを表示するにはどうすればよいでしょうか。具体的な質問-これは私のアニメーションGIFを表示するための正しいコードですか?そうでない場合、以下の修正が必要ですか?

電話での私のアニメーションGIFファイルの場所(インターネットからではありません):

Gif / explosion.gif

Xamlのメインページ:

xmlns:imagetools="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls" 
....

<phone:PhoneApplicationPage.Resources>
        <imagetools:ImageConverter x:Key="ImageConverter" />
</phone:PhoneApplicationPage.Resources>

....
<imagetools:AnimatedImage x:Name="animationgif" Source="{Binding ImageSource, Converter={StaticResource ImageConverter}}" />

xamlページの背後にあるコード:

public partial class MainPage : PhoneApplicationPage
{
 using ImageTools;
 using ImageTools.Controls;
 using ImageTools.IO.Gif;

 public MainPage()
    {
        InitializeComponent();
        ImageTools.IO.Decoders.AddDecoder<ImageTools.IO.Gif.GifDecoder>();
    }


 public void eventtofiretoshowexplosion_gif(object sender, MouseButtonEventArgs e)
 {
   // A main problem -- this code doesn't work by itself, as what is the ImageSource!?
   // It cannot be used as a variable it says.
   // animationgif.ImageSource does not work at all (not a method).
   ImageSource = new Uri("http://mysite/my.gif", UriKind.Absolute);
 }
}

これは過去数時間私を悩ませてきました、そして私は本当にこれでいくらかの助けを使うことができました。これに対する簡単な修正がある場合は、私をページに案内するのではなく、助けて、それがどのように行われるかを示してください。私はこれについてFARのページが多すぎるのを見てきました。それぞれが機能すると主張していますが、私のアプリでは機能しません。

4

2 に答える 2

3

イメージのビルド アクションが正しくないように思われるため、アプリケーションはリソースを「見つける」ことができません。

2 つのオプションがあります。ビルド アクションをコンテンツに設定するか、リソースとして設定して「新しい場合はコピー」を指定します。

  • ソリューション エクスプローラーを開く
  • プロパティウィンドウを開く
  • 画像をクリックしてください
  • ビルドアクションをに設定Resourceし、出力ディレクトリにコピーしますCopy if newer

参考資料: WPF のリソース – I (バイナリ リソース)


上記のリソース「要件」が与えられた場合に機能するように見えるビューモデルを使用して、小さな例をまとめました。お役に立てば幸いです。ビューモデル クラスは、ViewModels というフォルダーにあります。

using System;
using System.IO;
using System.Windows;
using ImageTools;
using ImageTools.IO;
using ImageTools.IO.Gif;

namespace GifViewer.ViewModels {
    public class MainViewModel : DependencyObject {
        public MainViewModel() {
            Decoders.AddDecoder<GifDecoder>();
            Uri uri = new Uri("Gif/explosion.gif", UriKind.Relative);
            ExtendedImage image = new ExtendedImage();
            // either of these two method work.
            // Just remove the first / to switch
            //*
            image.LoadingCompleted +=
                (o, e) => Dispatcher.BeginInvoke(() => AnimationImage = image);
            image.UriSource = uri;
            /*/
            Stream stream = Application.GetResourceStream(uri).Stream;
            GifDecoder decoder = new GifDecoder();
            decoder.Decode(image, stream);
            AnimationImage = image;
            /**/
        }

        public static readonly DependencyProperty AnimationImageProperty =
            DependencyProperty.Register("AnimationImage",
                typeof(ExtendedImage),
                typeof(MainViewModel),
                new PropertyMetadata(default(ExtendedImage)));

        public ExtendedImage AnimationImage {
            get { return (ExtendedImage)GetValue(AnimationImageProperty); }
            set { SetValue(AnimationImageProperty, value); }
        }
    }
}

そしてxaml

<phone:PhoneApplicationPage 
    x:Class="GifViewer.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:it="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
    xmlns:vm="clr-namespace:GifViewer.ViewModels"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <phone:PhoneApplicationPage.DataContext>
        <vm:MainViewModel/>
    </phone:PhoneApplicationPage.DataContext>

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <it:AnimatedImage  Source="{Binding AnimationImage}" />
    </Grid>
</phone:PhoneApplicationPage>
于 2012-09-11T18:06:35.983 に答える