Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/37: Рейтинг темы: голосов - 37, средняя оценка - 4.97
108 / 49 / 14
Регистрация: 06.03.2012
Сообщений: 796
1

PNG анимация из одного и нескольких PNG-файлов

08.04.2012, 05:53. Показов 7519. Ответов 8
Метки нет (Все метки)

Доброго времени суток! До начала изучения языка программирования, я увлекался созданием игр через специальные программы, в них была возможность сделать из png рисунка (набора из нескольких кадров в одном рисунке) *.png* анимацию.
Вопрос такой, как при помощи c# создать подобную анимацию *.PNG* рисунка?

И при возможности расскажите ещё, как создать анимацию из нескольких рисунков, того же формата, заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2012, 05:53
Ответы с готовыми решениями:

Объединение нескольких png файлов в один png-файл
В общем надо написать програмулину, которая объединяет несколько png файлов (ширина и высота...

Анимация посредством загрузки png файлов из внешней папки.
Нужна такая штука, чтобы файлы загружались и проигрывались через время заданое в таймере. А при...

Вращение TImage c PNG. Нужна переделка решения для BMP под PNG
Здравствуйте. Очень нужна помощь с вращением. Есть решение данной проблемы для формата bmp :...

Какое расширение выбрать JPG/GIF/PNG-8/PNG-24
Применение их

8
108 / 49 / 14
Регистрация: 06.03.2012
Сообщений: 796
11.04.2012, 07:58  [ТС] 2
Аппаю тему, так как считаю, что не мне одному будет интересно получить хоть какие-то примеры, если учесть, что *.GIF* анимация не поддерживается.
0
34 / 27 / 6
Регистрация: 31.03.2012
Сообщений: 115
11.04.2012, 08:33 3
apng, возможно?
Еще вариант - поменять расширение GIF на PNG XD
0
108 / 49 / 14
Регистрация: 06.03.2012
Сообщений: 796
11.04.2012, 08:53  [ТС] 4
разрешение поменять нельзя, а *.png* возможно.
Необходимо загрузить изоображенние, разделить его на кадры и запустить циклом через определённый интервал времени, ну или во втором варианте, загрузить несколько изоображений, но в отдельные кадры.
Представить легко, а как это написать...
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
11.04.2012, 21:53 5
ну а что тяжелого, есть картинка, через интервал времени меняете ее на следующую картинку.
пусть там какой-то контейнер Canvas содержит элемент Image у которого Source равен "\image1.png", как установить интервал времени - Thread.Sleep(500); метод Sleep принимает миллисекунды, в данном случае программа подождет полсекунды, после чего мы меняем значение свойства Source на "\image2.png" и т.д.
хотите чтобы картинка при этом двигалась? - меняете свойства Image - Top и Left и перемещаете
для других элементов и контейнеров могут быть другие ньюансы при перемещении, например Margin и т.д.
0
19 / 19 / 4
Регистрация: 08.03.2012
Сообщений: 72
12.04.2012, 06:00 6
Посмотри формат *.APNG
1
108 / 49 / 14
Регистрация: 06.03.2012
Сообщений: 796
12.04.2012, 08:32  [ТС] 7
Цитата Сообщение от Vorona Посмотреть сообщение
ну а что тяжелого, есть картинка, через интервал времени меняете ее на следующую картинку.
пусть там какой-то контейнер Canvas содержит элемент Image у которого Source равен "\image1.png", как установить интервал времени - Thread.Sleep(500); метод Sleep принимает миллисекунды, в данном случае программа подождет полсекунды, после чего мы меняем значение свойства Source на "\image2.png" и т.д.
хотите чтобы картинка при этом двигалась? - меняете свойства Image - Top и Left и перемещаете
для других элементов и контейнеров могут быть другие ньюансы при перемещении, например Margin и т.д.
Дело в том, что Thread.Sleep(500) ставит паузу на всю программу, а не на определённую задачу, и при выполнении других задач, надо будет ждать задержки одной анимации...

Добавлено через 3 минуты
Цитата Сообщение от newclaus Посмотреть сообщение
Посмотри формат *.APNG
Не потянет, это вообще недействительный формат анимации, который работает лишь у тех, у кого есть эта программа, для создания этой анимации....

Я её несколько лет назад хотел использовать для веб узлов, нечего не вышло, так как анимации нет.
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
12.04.2012, 16:05 8
Цитата Сообщение от Jylik Посмотреть сообщение
Дело в том, что Thread.Sleep(500) ставит паузу на всю программу, а не на определённую задачу, и при выполнении других задач, надо будет ждать задержки одной анимации...
так в чем проблема, раз у вас приложение работает в нескольки потоках, то приостановите определенный поток, который вам нужен, не этой статической функцией, а другой - суть ведь одна и та же
0
108 / 49 / 14
Регистрация: 06.03.2012
Сообщений: 796
12.04.2012, 16:14  [ТС] 9
в другом месте нашёл информацию, с приведённым кодом, если кому то поможет, вот он...
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
 
namespace Animations
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private BitmapImage[] images;
        private int counter = 0;
        public MainWindow()
        {
            InitializeComponent();
 
            images = new BitmapImage[3];
            images[0] = new BitmapImage(new Uri("/Animations;component/Images/1.png", UriKind.Relative));
            images[1] = new BitmapImage(new Uri("/Animations;component/Images/2.png", UriKind.Relative));
            images[2] = new BitmapImage(new Uri("/Animations;component/Images/3.png", UriKind.Relative));
            DispatcherTimer dT = new DispatcherTimer();
            dT.Interval = new TimeSpan(0,0,1);
            dT.Tick += new EventHandler(dT_Tick);
            dT.Start();
        }
 
        void dT_Tick(object sender, EventArgs e)
        {
            image1.Source = images[counter % images.Length];
            counter++;
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2012, 16:14

Close.png не была загружена, потому что её MIME-тип («image/png») не «text/css»
Вот такую получаю ошибку Таблица стилей http://localhost:8080/temp/images/close.png не была...

анимация png
Помогите пожалуйста разобраться с анимацией спрайта. Нужно чтоб по окончанию анимации оставался...

Анимация с png спрайтами
Всем привет, при работе с 2d анимацией я не могу работать со спрайтами .png формата. Bmp формат...

Открытие страницы fon.png.php вместо файла fon.png
видел сайт где на все файлы(например fon.png) стоят файлы-страницы(например fon.png.php), в итоге,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.