![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
Доброй ночи Уважаемые)
Это мое можно сказать первое приложение на WPF, и вопросы наверное глупые будут, но для меня они сейчас как молотком по одному месту) В этом коде загружаются два рисунка, прозрачность и обрезка по краям, вообщем мини приложение на рабочий стол к 8 Марта)
Тут косяк один, если триггер на анимацию раскомментировать, то процессор начинает грузиться под 90%, приложение не потаскаешь по экрану без тормозов..нужно делать анимацию в отдельном потоке, но два вопроса: 1. А смысл в потоке, если все действия его будут один фиг выполняться в основном потоке через Dispatcher, или я не так понимаю все? 2. Можно ли все-таки засунуть триггер в поток без использования кода? т.е. на XAML непосредственно? Ну и до кучи еще один вопрос, есть ли возможность изменять уровень прозрачности? т.е. к примеру 100%-70%-50% и т.д.? опять же для анимированного исчезновения появления? |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
если вы будете выполнять анимацию в другом потоке то с чего вы взяли что загрузка процессора будет меньше? Тем более, насколько я знаю, не возможно контролировать поток, в котором выполняется анимация. Вернее, скорее всего не возможно его отделить от потока в котором находится окно. И потом, эти задачи лежат на самой платформе WPF, поэтому не стоит туда вмешиваться. Opacity ? Тут есть пример msdn animation Для создания красивой анимации используйте Expression Blend А по поводу загрузки процессора, посмотрите, может вы анимируете слишком тяжёлое изображение? Это сообщение отредактировал(а) Rohoss - 2.3.2011, 23:00 |
|||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
ну я бы не сказал что оно очень уж тяжелое..простой текст в пнг с прозрачностью..
за opacity спасибо, разобрался) |
|||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
Вот здесь загрузка процессора на 60%((
|
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
WPF не испытует особой любви к растровым изображениям, я думаю, ситуация с производительностью была бы куда лучше, если бы вы использовали векторные изображения |
|||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
Rohoss, а как же тогда ситуация с обычными Button'ами?
|
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
А что с ними не так? И что значит с обычными? В WPF они не обычные ![]() |
|||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
запустите мой последний пример, там четыре кнопки, со свечением и анимацией св-ва opacity этого свеченения, какая загрузка процессора?
|
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
||||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
т.е. нет анимации?
|
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
||||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
puZzo, вообще, с анимацией всё в порядке. Ничего такого страшного она не вытворяет - изменение прозрачности уж точно не должно приводить к большой нагрузке. Я вашего кода не запускал, но смею предположить что проблема кроется в том, что анимация происходит в софтверном режиме.
Происходить это может в основном по двум причинам: 1) Ваша видеокарта очень старая (что сомнительно) или не установлены правильные драйверы (и используется какой-нибудь дефолт виндоуз драйвер). Этот пункт мы сразу отметаем, так как он маловероятен. 2) Вы используете BitmapEffect (в вашем случае проблема на лицо - OuterGlow). Попробуйте анимировать просто прозрачность картинки - удалите эффект свечения СОВСЕМ. Очень хорошо описаны эффекты на сайте МС - http://msdn.microsoft.com/en-us/library/ms743435.aspx. Прямо там же желтым по белому написано:
В итоге как решение проблемы - сначала проверьте уходят ли тормоза при полном удалении эффекта свечения из кода, а потом просто руками пририсовывайте свечение (тот же PNG и анимация прозрачности). И как золотое правило - эффекты могут казаться красивыми, но никогда не стоит их анимировать или использовать для больших обьектах. Не важно какая у вас система - всё равно рендеринг будет софтверный. Добавлено через 9 минут и 2 секунды Напоследок замечу, что толку от отдельного потока не будет - все операции по отрисовки все равно будут происходить в UI потоке. Если бы у вас для анимации нужны были сложные долгоиграющие вычисления - другое дело (извращенный случай, но вдруг ![]() |
|||
|
||||
exBlender |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.10.2009 Репутация: 9 Всего: 9 |
Для начала замените Image.BitmapEffect на
--------------------
HTML и CSS забыв как страшный сон, хвалу я заммэлу пою и фирме Майкрософт. |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
exBlender, а толку? Всё равно при добавлении любого эффекта рендеринг сразу переходит в софтовый режим и мы получаем тормоза. Чем эффект тени отличается от свечения?
|
|||
|
||||
puZzo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
заменил свечение на тень в примере с четырьмя кнопками и прозрачным окном, загрузка процессора ~45%..
у меня AMD 3000+ 1.81GHz, видео Radeon x1600, далеко не новое железо, но такие эффекты для него семечки..толи мелкомягкотелые придумали эти классы для супер железа, толи просто так, чтоб были.. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Они нормально работают, если их не заставлять слишком часто пересчитываться
Добавлено через 4 минуты и 59 секунд При любом изменении содержимого, к которому они применены, будет идти пересчет. Могу предложить вам еще закешировать в растр весь результат вместе с тенью и свечением и анимировать его. Я щас не помню как я делал это, какой-то битмап-кэшинг есть. Его нужно просто задать для элемента, остальное система сама все сделает. Там даже помню можно было задавать диапазон изменения при котором происходит автоперерисовка векторной графики в этот кэш. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Не стоит пенять на Майкрософт за то что вы не читаете документацию по этим эффектам. Эффекты не рассчитаны на анимацию. Они предназначены для подсветки элементов, небольших оконец и так далее. Если вам от гуя надо ещё больше отдачи - рисуйте всё что надо сами, WPF предоставляет много возможностей по анимации без использования эффектов.
Если коротко - если начинать забивать гвозди микроскопом, то это проблема того, кто забивает, а не производителя микроскопа. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Kefir, разве битмап-кэш не поможет в данном случае? Если уж очень хочется, то можно и так. Конечно анимировать элементы с эффектами это слишком затратно, но растровое кэширование поможет. Только вот не помню, как я добивался этого когда игрался с графикой.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Я битмап кашем вообще не пользовался - возможно можно туда покопать (хотя опять же не уверен, что оно через туда решается). Только вот если анимировать сам эффект то толку от этого не будет (в примере кода - анимация самого эффекта). Ну и заодно - нельзя будет анимировать саму кнопку или её эффект. Я к тому, что кэширование никому не будет надо, если изменять кэшированый элемент в анимации - на каждом фрейме кэш будет устаревать из-за какого-то изменившегося свойства. Ну эт я так - чисто логически
![]() |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Да, верно, если анимировать сам эффект, то толку от кэша будет ноль. Вобщем извратнуться то можно конечно, закешироваф только эффект, да вот только это такое проно получится в итоге... Вообще я кроме дропшэддоу и то в паре случаев никогда ничего не использовал, не было необходимости в этих тяжеленных вещах.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Я тоже использую тень иногда, в основном вместо MessageBox - просто показываю прозрачный оверлей на всё окно + посередине оттененный бордер с сообщением/вопросом. Для такого дела тень подходит очень хорошо
![]() Ну а анимировать эффекты это дело неблагодарное ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |