powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Анимация облаков
7 сообщений из 7, страница 1 из 1
Анимация облаков
    #38776846
dennisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь сделать анимацию облаков из 1493 кадров размером 1920х1080 со скоростью 25 кадров в секунду.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Window x:Class="TestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" WindowStyle="None" ResizeMode="NoResize" WindowState="Maximized" Loaded="Window_Loaded">
    <Window.Resources>
    </Window.Resources>
    <Grid>
        <Image Source="pack://application:,,,/Images/backgraund.jpg" Stretch="Fill" Margin="0"/>
        <Image Stretch="None" x:Name="imgOblaka">
        </Image>
        <Button Content="Button" HorizontalAlignment="Left" Margin="144,153,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    </Grid>
</Window>



Текст модуля:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace TestApp
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Storyboard oblakaStoryBoard;
        BitmapImage[] bmps;
        const int numofbmps = 1493;
        public MainWindow()
        {
            InitializeComponent();
            bmps = new BitmapImage[numofbmps];
            for (int i = 0; i < numofbmps; i++)
            {
                bmps[i] = new BitmapImage(new Uri(@"Images/Oblaka/oblaka_" + String.Format("{0:00000}", i) + ".png", UriKind.RelativeOrAbsolute));
            }
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            oblakaStoryBoard = new Storyboard();
            ObjectAnimationUsingKeyFrames oaukf = new ObjectAnimationUsingKeyFrames();
            oaukf.BeginTime = TimeSpan.FromSeconds(0);
            oaukf.RepeatBehavior = RepeatBehavior.Forever;
            Storyboard.SetTarget(oaukf, imgOblaka);
            Storyboard.SetTargetProperty(oaukf, new PropertyPath(Image.SourceProperty));
            for (int i = 0; i < numofbmps; i++)
            {
                DiscreteObjectKeyFrame dokf = new DiscreteObjectKeyFrame(bmps[i], TimeSpan.FromMilliseconds(i*40));
                oaukf.KeyFrames.Add(dokf);
            }
            oblakaStoryBoard.Children.Add(oaukf);
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            oblakaStoryBoard.Begin();
        }
    }
}



При клике на кнопку начинает воспроизводиться анимация. Но приложение начинает жрать оперативную память (доходит где-то до 4Гб) и анимация останавливается. Можно как-то сделать, чтобы картинки были в памяти в сжатом формате?
...
Рейтинг: 0 / 0
Анимация облаков
    #38776970
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennisss,

обычно для анимации с помощью Bitmap картинки используют "карты изображения" (image map) или как то по другому называется, я уже не помню точно :)
делают 1 картинку состоящую из множества кадров. После этого картинку грузят в память и выводят на экран только 1у из её частей (кадр). Так делают в XNA, на счет WPF я такого сам не делал. Но если применить верхний способ, то можно:
создать контрол нужного размера с ClipBound = True, разместить в нём эту картинку и размещать её на основе смещений высчитанного из размера каждра. По сути мы будем двигать картинку внутри ClipBound объекта :)). Соответственно задействованы будут только Arrange и Render.
...
Рейтинг: 0 / 0
Анимация облаков
    #38778133
dennisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Оперативы не хватает, чтобы такую картинку большую в памяти держать... 11Гб где-то только на нее...
...
Рейтинг: 0 / 0
Анимация облаков
    #38778292
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennisss,
значит подход у вас выбран не правильно. Мне не очень понятно, для чего нужно 11 гб при анимации облаков.
вижу тут 2 пути:
а) сокращение анимации для приемлемых размеров (20-30 кадров)
б) динамическая генерация облаков, без всяких Bitmap'ов в векторном варианте, тут с анимацией будет всё еще проще.


опишите хотя бы, более подробно, что за картинки, какого размера, сколько кадров и так далее.
...
Рейтинг: 0 / 0
Анимация облаков
    #38779498
dennisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1493 кадров размером 1920х1080 со скоростью 25 кадров в секунду
...
Рейтинг: 0 / 0
Анимация облаков
    #38779545
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennisss,

запилить видео нативного формата и отображать в <MediaElement />

но имхо, сам по себе подход у вас выбран неверный. WPF не для таких вещей.

что вы пытаетесь в результате получить? интерфейс в облаках? :)

используйте XNA Framework
...
Рейтинг: 0 / 0
Анимация облаков
    #38782499
dennisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

WPF для создания приложений-презентаций. Я как раз таки приложение-презентацию делаю...
Просто не подумал сначала, что памяти так не хватит... Придется искать другие пути...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Анимация облаков
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]