Как преобразовать ImageBrush в Color для анимации Canvas.Background (WPF)

Я пытаюсь сделать анимацию для фона моего холста, постепенно переходя от уже определенного фона с помощью ImageBrush (это изображение, представляющее сцену битвы) к другому ImageBrush, который представляет конец игрового экрана. Оба изображения заполняют весь фон холста. Есть ли конвертер, который позволяет преобразовывать ImageBrush в Color? Или какой-то BrushAnimation?

Я пробовал это, но получаю System.InvalidCastException: «Нет возможности преобразовать объект типа «System.Windows.Media.ImageBrush» в тип «System.Windows.Media.SolidColorBrush».

            Brush newColor = miLienzo.Background;
            SolidColorBrush newBrush = (SolidColorBrush)newColor;
            Color myColorFromBrush = newBrush.Color;

            endBrush.ImageSource = new BitmapImage(new Uri("Imagenes/fin.jpg", UriKind.Relative));
            Brush newColor2 = endBrush;
            SolidColorBrush newBrush2 = (SolidColorBrush)newColor2;
            Color myColorFromBrush2 = newBrush2.Color;

            ColorAnimation animation;
            animation = new ColorAnimation();
            animation.From = myColorFromBrush;
            animation.To = myColorFromBrush2;
            animation.Duration = new Duration(TimeSpan.FromSeconds(2));
            miLienzo.Background.BeginAnimation(SolidColorBrush.ColorProperty, animation);

person Angel    schedule 27.12.2019    source источник
comment
Возможно, эта ссылка будет полезна: docs.microsoft.com/en-us/dotnet/framework/wpf/   -  person Mahdi Asgari    schedule 27.12.2019


Ответы (1)


Вы не можете делать то, что пытаетесь сделать.

Поместите изображение на холст и сделайте части, которые вы собираетесь анимировать, прозрачными.

Or

Проследите статическую часть в геометрию, используя inkscape, и используйте ее, чтобы определить форму, которую вы аналогичным образом размещаете на своем холсте.

В любом случае статические части отделены друг от друга и находятся поверх фона.

Сделайте фон сплошной кистью.

Затем вы можете анимировать цвет в этой SolidColorBrush. Это сработает.

Одним из преимуществ подхода, основанного на форме, является то, что он также может иметь другую кисть сплошного цвета для заливки (и, если уж на то пошло, обводки). Затем вы можете анимировать и его цвет.

Геометрии также довольно легкие, а формы являются векторами, поэтому они хорошо масштабируются.

Or

Наложите два изображения с вашими двумя изображениями в качестве источника. Анимируйте непрозрачность одного из них с 1,0 до 0, а другого с 0 до 1,0, чтобы один исчез, а другой появился. Возможно, это не совсем то, что вы имеете в виду, но может выглядеть круто.

person Andy    schedule 27.12.2019
comment
Спасибо за все советы. В конце концов я установил черную кисть для фона холста и добавил метку (которая также является просто надписью YOU DIED на красном на черном фоне) с окончанием игры поверх черного фона, поэтому я смог использовать DoubleAnimation в чтобы изменить непрозрачность этикетки, и я даже получил результат лучше, чем ожидал! ха-ха - person Angel; 28.12.2019