快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

龙8娱乐国际手机版下载安装:【Windows Phone实用开发教程】40、使用NGif创建GIF图片示例



NGif是.net 顶用来创建gif图片的类库,可以迁移到windows phone中来,在windows phone中创建gif图片。

Gif动画便是在必然光阴距离内,将图片依次显示,将多幅图像保存为一个图像文件,从而形成动画。

把NGif迁移到windows phone有两种不合的要领

1. 在原始的NGif中采纳image工具表示当前帧的图像,windows phone中也有image工具,直接应用,只要改动部分不兼容的代码即可

2. 应用WriteableBitmap代替image,用来表示当前帧的图像。

在翰墨末真个示例demo中两种要领都有源代码供给。

要领一:

在NGif中,应用了GDI技巧,我们可以应用WriteableBitmap的扩展措施去调换。

Image temp =

new Bitmap(width, height); Graphics g = Graphics.FromImage(temp);

g.DrawImage(image, 0, 0); image = temp;

g.Dispose();

可以写为

WriteableBitmap temp = new WriteableBitmap(image,null);

temp.Resize(width, height, WriteableBitmapExtensions.Interpolation.NearestNeighbor); image = new Image { Source = temp };

至于其他的迁移代码可以在源代码中查看。

本文将会应用迁移后的NGif从相册中选择图片,制作GIF图片以及着末在法度榜样中显示制作的图片。首页运行效果如下:

图片选择的模板如下:

DataTemplate x:Key="DT_Image">

Grid>Button Click="Button_Click">

Button.Template>ControlTemplate>

Image Source="{Binding Thumbnail}" Height="100" Width="100" Margin="5" />ControlTemplate>

Button.Template>Button>

Image Source="selected.png"Height="32" Width="32"

Visibility="{Binding IsSelectedVisibility}"HorizontalAlignment="Righ龙8娱乐国际手机版下载安装t"

VerticalAlignmen龙8娱乐国际手机版下载安装t="Bottom"/>Grid>

DataTemplate>

ListBox代码如下:

ListBox x:Name="lbDefault" Margin="7龙8娱乐国际手机版下载安装,-10,0,0"

ItemTemplat龙8娱乐国际手机版下载安装e="{StaticResource DT_Image}"ItemsSource="{Binding DefaultImages}">

ListBox.ItemsPanel>ItemsPanelTemplate>

toolkit:WrapPanel/>ItemsPanelTemplate>

ListBox.ItemsPanel> ListBox>

至于从相册中加载图片可以查见地度榜样源代码。

看一下制作GIF的代码

private void btn2_Click(object sender, RoutedEventArgs e)

{List

list = new List

();

foreach (var item in defaultImages){

if (item.IsSelectedVisibility == System.Windows.Visibility.Visible){

list.Add(item);}

}if (list.Count == 0)

{MessageBox.Show(龙8娱乐国际手机版下载安装"请选择图片");

return;}

String outputFilePath = "test2.gif";

GifLib2.AnimatedGifEncoder maker = new GifLib2.AnimatedGifEncoder();maker.Start(outputFilePath);

maker.SetDelay(500);//-1:no repeat,0:always repeat

maker.SetRepeat(0);

foreach (var item in list){

maker.AddFrame(item.Image.Resize(320, 320, WriteableBitmapExtensions.Interpolation.NearestNeighbor));}

maker.Finish();MessageBox.Show("done, find it in iso named :" + outputFilePath);

NavigationService.Navigate(new Uri("/DisplayGifPage.xaml?name=" + outputFilePath, UriKind.Relative)); }

首先实例化AnimatedGifEncoder工具,设置其输前道路,距离光阴,以及重复次数,然后将要制作的图片添加到其帧中就可以了。

制作Gif完成后,我们会在法度榜样中显示制作的Gif,此时就要用到GifDecoder了,将Gif解码为一张张图片。

private void LoadGif(string name)

{GifDecoder decoder = new GifDecoder();

using (var store = IsolatedStorageFile.GetUserStoreForApplication()){

if (!store.FileExists(name)){

MessageBox.Show("gif image 不存在");return;

}using (var stream = store.OpenFile(name, System.IO.FileMode.Open, System.IO.FileAccess.Read))

{decoder.Read(stream);

//get frame size to set image size

Size size = decoder.GetFrameSize();image.Width = size.Width;

image.Height = size.Height;

int delay = decoder.GetDelay(1);

//0 stand for loop forever, otherwise is the real countint loopCount = decoder.GetLoopCount();

//decoder.GetLoopCountint imagecount = decoder.GetFrameCount();

for (int i = 0; i{

imageList.Add(decoder.GetFrame(i));}

DisplayGif(delay, loopCount);}

} }

从自力存储空间中加载Gif,并且获取他的一些属性:重复次数,帧数,以及每一帧对应的图像,然后应用一个Timer将其显示即可:

private void DisplayGif(int delay, int loopCount)

{DispatcherTimer timer = new DispatcherTimer();

timer.Interval = TimeSpan.FromMilliseconds(delay);int index = 0;

int loopedCount = 0;//已经轮回的次数timer.Tick += (sender, e) =>

{//假如是永世轮回

if (loopCount == 0){

if (index == imageList.Count - 1){

index = 0;}

}else

{if (loopCount == loopedCount)

{timer.Stop();

}loopedCount++;

}image.Source = imageList[index];

index++;};

timer.Start(); }

本文仅仅讲述了若何在windows phone中制作Gif,并且解码并显示Gif,此中很多代码可以优化,大年夜家可以酌情应用本示例中的代码。

源代码可以在这里找到。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: