Как повернуть ImageDrawing? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь нарисовать изображение, которое состоит из нескольких других изображений. И некоторые из этих изображений необходимо вращать. Я использую ImageDrawing и DrawingGroup

Я нашел класс RotateTransform, но его нельзя применить к ImageDrawing, только к DrawingGroup.

private void RedrawAquarium(object sender, EventArgs args)
{
    aquarium.Iterate();

    DrawingGroup aquariumImages = new DrawingGroup();

    ImageDrawing background = new ImageDrawing();
    background.Rect = new Rect(aquarium.Size);
    background.ImageSource = new BitmapImage(aquarium.BackgroundImageUri);
    aquariumImages.Children.Add(background);

    foreach (var fish in aquarium.Fishes)
    {
        ImageDrawing fishImage = new ImageDrawing();
        fishImage.Rect = new Rect(fish.Value.Position, fish.Value.Size);
        fishImage.ImageSource = new BitmapImage(fish.Value.TextureUri);
        aquariumImages.Children.Add(fishImage);
    }

    DrawingImage drawingImageSource = new DrawingImage(aquariumImages);
    drawingImageSource.Freeze();
    BackgroundImage.Source = drawingImageSource;
}

Должен ли я использовать что-то вместо класса ImageDrawing?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Если вам нужны только простые повороты, это должно сработать:

var bitmap = new BitmapImage(fish.Value.TextureUri);
bitmap.Rotation = Rotation.Rotate90;

Для более сложных поворотов достаточно ответа ниже:

aquariumImages.Children.Add(new DrawingGroup() { Children = { fishImage }, Transform = new RotateTransform(45)});

(Реализация ответа Матузы)

Я подтвердил, что это действительно работает: Пример экрана VS

0 голосов
/ 26 марта 2019

Вы можете добавить свой ImageDrawing в DrawingGroup и вращать его. Дочерними в DrawingGroup могут быть другие элементы DrawingGroup.

Я не эксперт, но документация объясняет, что ImageDrawing действительно интересен с точки зрения производительности (возможность заморозки), но предоставляет меньше возможностей, чем Image.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...