图片旋转
图片旋转:本篇主要讲述实现图片旋转的两种方式,在多张图片的情景下实现图片的旋转,在单张图片的情景下旋转。
- 多张图片旋转
- 单张图片旋转
- 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……