Модераторы: gambit, Kefir, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF DoubleAnimation в отдельном потоке.. 
:(
    Опции темы
puZzo
Дата 2.3.2011, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Доброй ночи Уважаемые)

Это мое можно сказать первое приложение на WPF, и вопросы наверное глупые будут, но для меня они сейчас как молотком по одному месту)

В этом коде загружаются два рисунка, прозрачность и обрезка по краям, вообщем мини приложение на рабочий стол к 8 Марта)
Код
<Window x:Class="flower1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="651" Width="604" WindowStyle="None" AllowsTransparency="True" Background="Transparent"
    ShowInTaskbar="False" MouseDown="image1_MouseDown" MouseMove="image1_MouseMove">
    <Grid Height="Auto" Name="grid1" Width="Auto">
        <Image Name="image1" Stretch="Fill" Source="/flower1;component/text.png" Height="178" VerticalAlignment="Top" 
               HorizontalAlignment="Left" Width="289" MouseDown="image1_MouseDown" MouseMove="image1_MouseMove">
            <Image.BitmapEffect>
                <OuterGlowBitmapEffect x:Name="image1_OuterGlowBitmapEffect" GlowSize="1.5" GlowColor="Black" Opacity="1.0"/>
            </Image.BitmapEffect>
            
            <!--
            <Image.Triggers>
                <EventTrigger RoutedEvent="Image.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="image1_OuterGlowBitmapEffect" Storyboard.TargetProperty="GlowSize"
                                             From="1.5" To="0" Duration="0:0:0.3" RepeatBehavior="Forever" AutoReverse="True">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>

            </Image.Triggers>
            -->
        </Image>

        <Image Margin="27,29,149,97" Name="image2" Stretch="Fill" Source="/flower1;component/3abc0d82af15.png"
               MouseRightButtonDown="image2_MouseRightButtonDown">
            <Image.BitmapEffect>
                <OuterGlowBitmapEffect GlowSize="4.0" GlowColor="LightBlue" Opacity="1.0"/>
            </Image.BitmapEffect>
        </Image>
    </Grid>
</Window>


Тут косяк один, если триггер на анимацию раскомментировать, то процессор начинает грузиться под 90%, приложение не потаскаешь по экрану без тормозов..нужно делать анимацию в отдельном потоке, но два вопроса:
1. А смысл в потоке, если все действия его будут один фиг выполняться в основном потоке через Dispatcher, или я не так понимаю все?
2. Можно ли все-таки засунуть триггер в поток без использования кода? т.е. на XAML непосредственно?


Ну и до кучи еще один вопрос, есть ли возможность изменять уровень прозрачности? т.е. к примеру 100%-70%-50% и т.д.? опять же для анимированного исчезновения появления?
PM ICQ   Вверх
Rohoss
Дата 2.3.2011, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(puZzo @  2.3.2011,  20:35 Найти цитируемый пост)
1. А смысл в потоке, если все действия его будут один фиг выполняться в основном потоке через Dispatcher, или я не так понимаю все?

если вы будете выполнять анимацию в другом потоке то с чего вы взяли что загрузка процессора будет меньше? Тем более, насколько я знаю, не возможно контролировать поток, в котором выполняется анимация. Вернее, скорее всего не возможно его отделить от потока в котором находится окно. И потом, эти задачи лежат на самой платформе WPF, поэтому не стоит туда вмешиваться.


Цитата(puZzo @  2.3.2011,  20:35 Найти цитируемый пост)
Ну и до кучи еще один вопрос, есть ли возможность изменять уровень прозрачности? т.е. к примеру 100%-70%-50% и т.д.? опять же для анимированного исчезновения появления? 

Opacity ?

Тут есть пример msdn animation

Для создания красивой анимации используйте Expression Blend 

А по поводу загрузки процессора, посмотрите, может вы анимируете слишком тяжёлое изображение?

Это сообщение отредактировал(а) Rohoss - 2.3.2011, 23:00


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
puZzo
Дата 3.3.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



ну я бы не сказал что оно очень уж тяжелое..простой текст в пнг с прозрачностью..
за opacity спасибо, разобрался)
PM ICQ   Вверх
puZzo
Дата 3.3.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Вот здесь загрузка процессора на 60%((

Код
<Window x:Class="flower1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="343" Width="397" ShowInTaskbar="False" MouseDown="image1_MouseDown" MouseMove="image1_MouseMove" 
        HorizontalAlignment="Stretch">
    <Grid>
        <Button Height="23" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75"
                MouseDown="image1_MouseDown" MouseMove="image1_MouseMove">Button
            <Button.BitmapEffect>
                <OuterGlowBitmapEffect x:Name="b1" GlowSize="3" GlowColor="Orange" Opacity="1.0" />
            </Button.BitmapEffect>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="b1" Storyboard.TargetProperty="Opacity"
                                             From="1.0" To="0.3" Duration="0:0:1" RepeatBehavior="Forever" AutoReverse="True">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
        <Button Height="23" HorizontalAlignment="Left" Margin="12,78,0,0" Name="button2" VerticalAlignment="Top" Width="75">Button
            <Button.BitmapEffect>
                <OuterGlowBitmapEffect x:Name="b2" GlowSize="3" GlowColor="Orange" Opacity="1.0" />
            </Button.BitmapEffect>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="b2" Storyboard.TargetProperty="Opacity"
                                             From="1.0" To="0.3" Duration="0:0:1" RepeatBehavior="Forever" AutoReverse="True">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
        <Button Height="23" HorizontalAlignment="Left" Margin="12,45,0,0" Name="button3" VerticalAlignment="Top" Width="75">Button
            <Button.BitmapEffect>
                <OuterGlowBitmapEffect x:Name="b3" GlowSize="3" GlowColor="Orange" Opacity="1.0" />
            </Button.BitmapEffect>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="b3" Storyboard.TargetProperty="Opacity"
                                             From="1.0" To="0.3" Duration="0:0:1" RepeatBehavior="Forever" AutoReverse="True">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
        <Button Height="23" HorizontalAlignment="Left" Margin="12,111,0,0" Name="button4" VerticalAlignment="Top" Width="75">Button
            <Button.BitmapEffect>
                <OuterGlowBitmapEffect x:Name="b4" GlowSize="3" GlowColor="Orange" Opacity="1.0" />
            </Button.BitmapEffect>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="b4" Storyboard.TargetProperty="Opacity"
                                             From="1.0" To="0.3" Duration="0:0:1" RepeatBehavior="Forever" AutoReverse="True">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
        
    </Grid>
</Window>

PM ICQ   Вверх
Rohoss
Дата 3.3.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(puZzo @  3.3.2011,  11:34 Найти цитируемый пост)
простой текст в пнг с прозрачностью..

WPF не испытует особой любви к растровым изображениям, я думаю, ситуация с производительностью была бы куда лучше, если бы вы использовали векторные изображения


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
puZzo
Дата 3.3.2011, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Rohoss, а как же тогда ситуация с обычными Button'ами?
PM ICQ   Вверх
Rohoss
Дата 4.3.2011, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(puZzo @  3.3.2011,  22:48 Найти цитируемый пост)
Rohoss, а как же тогда ситуация с обычными Button'ами? 

А что с ними не так?

И что значит с обычными? В WPF они не обычные  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
puZzo
Дата 4.3.2011, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



запустите мой последний пример, там четыре кнопки, со свечением и анимацией св-ва opacity этого свеченения, какая загрузка процессора?
PM ICQ   Вверх
Rohoss
Дата 4.3.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(puZzo @  4.3.2011,  05:08 Найти цитируемый пост)
запустите мой последний пример, там четыре кнопки, со свечением и анимацией св-ва opacity этого свеченения, какая загрузка процессора? 

нет ни анимации ни загрузки процессора. и ваших обработчиков MouseDown="image1_MouseDown" MouseMove="image1_MouseMove" тоже нет


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
puZzo
Дата 5.3.2011, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



т.е. нет анимации?
PM ICQ   Вверх
Rohoss
Дата 5.3.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(puZzo @  5.3.2011,  03:59 Найти цитируемый пост)
т.е. нет анимации? 

 smile 

Стандартная анимация кнопки

PS. У меня Win 7 x64


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Kefir
Дата 6.3.2011, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



puZzo, вообще, с анимацией всё в порядке. Ничего такого страшного она не вытворяет - изменение прозрачности уж точно не должно приводить к большой нагрузке. Я вашего кода не запускал, но смею предположить что проблема кроется в том, что анимация происходит в софтверном режиме.

Происходить это может в основном по двум причинам:
1) Ваша видеокарта очень старая (что сомнительно) или не установлены правильные драйверы (и используется какой-нибудь дефолт виндоуз драйвер). Этот пункт мы сразу отметаем, так как он маловероятен.
2) Вы используете BitmapEffect (в вашем случае проблема на лицо - OuterGlow). Попробуйте анимировать просто прозрачность картинки - удалите эффект свечения СОВСЕМ.

Очень хорошо описаны эффекты на сайте МС - http://msdn.microsoft.com/en-us/library/ms743435.aspx. Прямо там же желтым по белому написано:
Цитата

WPF bitmap effects are rendered in software mode. Any object that applies an effect will also be rendered in software. Performance is degraded the most when using Bitmap effects on large visuals or animating properties of a Bitmap effect. This is not to say that you should not use Bitmap effects in this way at all, but you should use caution and test thoroughly to ensure that your users are getting the experience you expect.



В итоге как решение проблемы - сначала проверьте уходят ли тормоза при полном удалении эффекта свечения из кода, а потом просто руками пририсовывайте свечение (тот же PNG и анимация прозрачности).

И как золотое правило - эффекты могут казаться красивыми, но никогда не стоит их анимировать или использовать для больших обьектах. Не важно какая у вас система - всё равно рендеринг будет софтверный.

Добавлено через 9 минут и 2 секунды
Напоследок замечу, что толку от отдельного потока не будет - все операции по отрисовки все равно будут происходить в UI потоке. Если бы у вас для анимации нужны были сложные долгоиграющие вычисления - другое дело (извращенный случай, но вдруг smile).
PM MAIL WWW Skype   Вверх
exBlender
Дата 6.3.2011, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.10.2009

Репутация: 9
Всего: 9



Для начала замените Image.BitmapEffect на 
Код

<Image.Effect>
    <DropShadowEffect ShadowDepth="0" />
</Image.Effect>

--------------------
HTML и CSS забыв как страшный сон, хвалу я заммэлу пою и фирме Майкрософт.
PM MAIL   Вверх
Kefir
Дата 6.3.2011, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



exBlender, а толку? Всё равно при добавлении любого эффекта рендеринг сразу переходит в софтовый режим и мы получаем тормоза. Чем эффект тени отличается от свечения?
PM MAIL WWW Skype   Вверх
puZzo
Дата 6.3.2011, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



заменил свечение на тень в примере с четырьмя кнопками и прозрачным окном, загрузка процессора ~45%..
у меня AMD 3000+ 1.81GHz, видео Radeon x1600, далеко не новое железо, но такие эффекты для него семечки..толи мелкомягкотелые придумали эти классы для супер железа, толи просто так, чтоб были..
PM ICQ   Вверх
-Mikle-
Дата 7.3.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Они нормально работают, если их не заставлять слишком часто пересчитываться

Добавлено через 4 минуты и 59 секунд
При любом изменении содержимого, к которому они применены, будет идти пересчет. Могу предложить вам еще закешировать в растр весь результат вместе с тенью и свечением и анимировать его. Я щас не помню как я делал это, какой-то битмап-кэшинг есть. Его нужно просто задать для элемента, остальное система сама все сделает. Там даже помню можно было задавать диапазон изменения при котором происходит автоперерисовка векторной графики в этот кэш.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Kefir
Дата 7.3.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Не стоит пенять на Майкрософт за то что вы не читаете документацию по этим эффектам. Эффекты не рассчитаны на анимацию. Они предназначены для подсветки элементов, небольших оконец и так далее. Если вам от гуя надо ещё больше отдачи - рисуйте всё что надо сами, WPF предоставляет много возможностей по анимации без использования эффектов.

Если коротко - если начинать забивать гвозди микроскопом, то это проблема того, кто забивает, а не производителя микроскопа.
PM MAIL WWW Skype   Вверх
-Mikle-
Дата 7.3.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Kefir, разве битмап-кэш не поможет в данном случае? Если уж очень хочется, то можно и так. Конечно анимировать элементы с эффектами это слишком затратно, но растровое кэширование поможет. Только вот не помню, как я добивался этого когда игрался с графикой.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Kefir
Дата 7.3.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Я битмап кашем вообще не пользовался - возможно можно туда покопать (хотя опять же не уверен, что оно через туда решается). Только вот если анимировать сам эффект то толку от этого не будет (в примере кода - анимация самого эффекта). Ну и заодно - нельзя будет анимировать саму кнопку или её эффект. Я к тому, что кэширование никому не будет надо, если изменять кэшированый элемент в анимации - на каждом фрейме кэш будет устаревать из-за какого-то изменившегося свойства. Ну эт я так - чисто логически smile. То есть если хочется заюзать кэш, то надо чтобы кэшируемый обьект не изменялся.
PM MAIL WWW Skype   Вверх
-Mikle-
Дата 8.3.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Да, верно, если анимировать сам эффект, то толку от кэша будет ноль. Вобщем извратнуться то можно конечно, закешироваф только эффект, да вот только это такое проно получится в итоге... Вообще я кроме дропшэддоу и то в паре случаев никогда ничего не использовал, не было необходимости в этих тяжеленных вещах.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Kefir
Дата 8.3.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Я тоже использую тень иногда, в основном вместо MessageBox - просто показываю прозрачный оверлей на всё окно + посередине оттененный бордер с сообщением/вопросом. Для такого дела тень подходит очень хорошо smile
Ну а анимировать эффекты это дело неблагодарное smile Можно наверное закешироваться как-то саму кнопку с эффектом и анимировать их контейнер... черт знает. Я бы всё равно с опаской к таким экспериментам подходил.
PM MAIL WWW Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1185 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.