简体   繁体   中英

Rotating BitmapImage in C# / XAML

I have 2 BitmapImages in a List:

    BitmapImage img1 = new BitmapImage((new Uri("Images/image1.jpg", UriKind.Relative)));
    BitmapImage img1 = new BitmapImage((new Uri("Images/image2.jpg", UriKind.Relative)));

    List<BitmapImage> images = new List<BitmapImage>();

    images.Add(img1);
    images.Add(img2);

How do I rotate both bitmap images with the push of a button?

I have tried the solution (shown below) from MSDN, but I'm getting "no definition for 'Source'".

private void TurnLeft_Click(object sender, RoutedEventArgs e)
{
    //Create source
    BitmapImage bi = new BitmapImage();

    //BitmapImage properties must be in a BeginInit/EndInit block
    bi.BeginInit();
    bi.UriSource = new Uri("Images/image1.jpg", UriKind.Relative);

    //Set image rotation
    bi.Rotation = Rotation.Rotate270;
    bi.EndInit();

    //set BitmapImage "img2" from List<BitmapImage> from source
    img2.Source = bi;
}   

Take a look the following segments of code.

XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Image x:Name="Image1" Stretch="Uniform" >
        <Image.Source>
            <BitmapImage UriSource="Images/logo.png"/>
        </Image.Source>
    </Image>

    <Button x:Name="TurnLeftButton" Content="TurnLeft"
            Click="TurnLeftButton_Click"
            Grid.Row="1"/>
</Grid>

Code behind:

private void TurnLeftButton_Click(object sender, RoutedEventArgs e)
{
    var biOriginal = (BitmapImage) Image1.Source;

    var biRotated = new BitmapImage();
    biRotated.BeginInit();
    biRotated.UriSource = biOriginal.UriSource;
    biRotated.Rotation = Rotation.Rotate270;
    biRotated.EndInit();

    Image1.Source = biRotated;
}

dbvega has answered my question. However, there is a cast exception and I thought I'd address it for anyone who is using my question to solve your error(s).

The correct C# code for dbvega's example should look like this:

private void TurnLeftButton_Click(object sender, RoutedEventArgs e)
{
    var biRotated = new BitmapImage();
    biRotated.BeginInit();
    biRotated.UriSource = new Uri("Images/logo.png", UriKind.Relative);
    biRotated.Rotation = Rotation.Rotate270;
    biRotated.EndInit();

    Image1.Source = biRotated;
}

Hats off to dbvega though - problem solved!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM