посмотреть GIF-изображение в изображении UI управления Windows Phone 7 - PullRequest
0 голосов
/ 26 августа 2011

Я хочу отобразить изображение GIF в элементе управления изображениями пользовательского интерфейса.

У меня есть изображение image1;

image1.source = new BitmapImage (новый Uri (ссылка, UriKind.Absolute));

но ссылка на Uri - это изображение .gif.

Я прочитал это: imagetool однако я все еще не понимаю, как использовать библиотеку. Я загрузил библиотеку и добавил ссылки, затем я застрял, я хочу установить исходный код. Можете ли вы помочь объяснить это немного больше?

Мой код сейчас такой:

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

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid HorizontalAlignment="Right" Width="69">
        <Border  BorderBrush="White" BorderThickness="3" CornerRadius="7" Background="Black">
            <Image  Width="69" Height="69" Name="canvasImage" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center" ImageFailed="canvasImage_ImageFailed" />
        </Border>
        <Border  BorderBrush="White" BorderThickness="3" CornerRadius="7" Background="Black">
            <imagetools:AnimatedImage  Name="canvasGifImage" Width="69" Height="69" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </Border>
    </Grid>
</Grid>

        In my MainPage.xaml.cs, because I don't know whether it is an png/jpg or a gif, so I have it try to load png/jpg first, if failed then try load gif in the imagetools control name canvasGifImage:

        private void DisplayImage(int index, string link)
    {
        try
        {
            control1.canvasImage.Source = new BitmapImage(new Uri(link, UriKind.Absolute));
        }
        catch //if fail to load image as normal, do this
        {
            //but I dont know how to set Source for the canvasGifImage, help me here:

            control1.canvasGifImage.Source = *new BitmapImage(new Uri(link, UriKind.Absolute));*

        }
    }

1 Ответ

0 голосов
/ 26 августа 2011

Замените использование ManualResetEvent для асинхронного кода.

using (var resetEvent = new ManualResetEvent(false))
{
    ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
    var extendedImage = new ExtendedImage();
    extendedImage.LoadingCompleted += (s, e) => resetEvent.Set();
    extendedImage.LoadingFailed += (s, e) => resetEvent.Set();
    extendedImage.SetSource(gifStream);
    resetEvent.WaitOne(TimeSpan.FromSeconds(5));

    // Check for timeout or error

    var enc = new JpegEncoder();
    var jpegStream = new MemoryStream();
    enc.Encode(extendedImage, jpegStream);
    ...

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...