首页 > 解决方案 > 如何旋转 ImageDrawing?

问题描述

我正在尝试绘制由多个其他图像组成的图像。其中一些图像需要旋转。我正在使用 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 类吗?

标签: c#wpf

解决方案


如果您只需要简单的旋转,这应该可以:

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

对于更复杂的旋转,下面的答案应该足够了:

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

(matoouse答案的实现)

我已经确认这确实有效: VS screen example


推荐阅读