图片旋转

图片旋转

图片旋转:本篇主要讲述实现图片旋转的两种方式,在多张图片的情景下实现图片的旋转,在单张图片的情景下旋转。

  • 多张图片旋转
  • 单张图片旋转
  • Demo下载

多张图片旋转
实现多张图片的旋转主要依赖于对文件流的操作,首先确保不同时间点的图片都存放在程序运行目录的Debug文件夹下。如果不是的话可能会出现找不到资源文件的错误。当然也可以通过其他方式解决,在这里就不负赘了。

程序初始时,定义一个存放图片的List,并通过文件流获取所有的图片。

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

for (int i = 1; i < 9; i++)
{
    FileStream fs = new FileStream(string.Format("Image/f{0}.png", i), FileMode.Open);
    BitmapImage bmp = new BitmapImage();
    bmp.BeginInit();
    bmp.StreamSource = fs;
    bmp.EndInit();
    images.Add(bmp);
}

在需要的位置实现遍历

this.Dispatcher.Invoke(new Action(() =>
{
    img1.Source = images[i1];
    i1++;
    if (i1 > 7)
        i1 = 0;
}));

效果图:
这里写图片描述
单张图片旋转
这种方式运用比较广泛,除了能够完成图片旋转效果外,在其他方面也有显著的效果,而主要的原因是,这种方式能够灵活地控制图片旋转地角度和旋转中心点,可操作性比较大。

首先要对Image图片添加Transform属性。

  <Image x:Name="Img" HorizontalAlignment="Left" Height="150" Margin="390,63,0,0" VerticalAlignment="Top" Width="150" Source="Image/3.png" RenderTransformOrigin="0.493,0.497">
            <Image.RenderTransform>
                <TransformGroup>
                    <TranslateTransform />
                    <ScaleTransform />
                    <RotateTransform />
                </TransformGroup>
            </Image.RenderTransform>
        </Image>

相应位置添加以下实现代码:

this.Dispatcher.Invoke(new Action(() =>
{
    TransformGroup tg = Img.RenderTransform as TransformGroup;
    var tgnew = tg.CloneCurrentValue();
    if (tgnew != null)
    {
        RotateTransform rt = tgnew.Children[2] as RotateTransform;
        Img.RenderTransformOrigin = new Point(0.5, 0.5);
        //rt.Angle -= 5;  左
        rt.Angle += 5;
    }
    // 重新给图像赋值Transform变换属性
    Img.RenderTransform = tgnew;
}));

效果图:
这里写图片描述
Demo下载
如有需要点击下载Demo。Demo内含两个文件,包括单张图片的旋转和多张图片的旋转。其中多张旋转的项目文件在后期的整理中改了一下文件名,导致项目不可用,可能需要重新加载。
emmm……资源上传之后才发现这个小bug……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋洋脚踝的金铃响了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值