CroppedBitmap 实现 ISupportInitialize 接口,以优化对多个属性的初始化。 只能在对象初始化过程中进行属性更改。 调用 BeginInit 发出信号的初始化已开始和 EndInit 发出信号的初始化已完成。 初始化后,将忽略属性更改。
CroppedBitmap 通过使用创建的对象 CroppedBitmap(BitmapSource, Int32Rect) 构造函数将自动初始化,并且不能更改的属性。
如果将图像保存到文件应用转换后,必须更新与图像数据相关的元数据标记。
使用 SourceRect 这个类来定义要裁剪的位图的区域的属性。
下面是一个截取图片特定部分的函数:
/// <summary>
/// 获取一张图片中的一部分
/// </summary>
/// <param name="ImgUri">图片路径</param>
/// <param name="XCoordinate">要截取部分的X坐标</param>
/// <param name="YCoordinate">要截取部分的Y坐标</param>
/// <param name="Width">截取的宽度</param>
/// <param name="Height">截取的高度</param>
/// <returns></returns>
private BitmapSource GetPartImage(string ImgUri, int XCoordinate, int YCoordinate, int Width, int Height)
{
return new CroppedBitmap(BitmapFrame.Create(new Uri(ImgUri, UriKind.Relative)), new Int32Rect(XCoordinate, YCoordinate, Width, Height));
}
将图片截取出来后,我们还需要对图片进行显示,有些图片可能会有旋转动作,下面简单实现通过TransformedBitmap 来进行图片的旋转。
TransformedBitmap tb = new TransformedBitmap();
tb.BeginInit();//表示开始 TransformedBitmap 初始化。
BitmapSource bs = GetPartImage("D:\\" + json.Meta.Image, json.Frames[1].Frame.X,
json.Frames[1].Frame.Y,
json.Frames[1].Frame.W,
json.Frames[1].Frame.H);
tb.Source = bs;
RotateTransform transform = new RotateTransform(-90);//旋转角度
tb.Transform = transform;
tb.EndInit();//结束的信号 BitmapImage 初始化。
imgs.Source = tb;//设置image控件source
TransformedBitmap 支持仅正交转换,如 90 度的增量旋转转换和缩放转换。 不支持倾斜图像的转换。
TransformedBitmap 实现 ISupportInitialize 接口,以优化对多个属性的初始化。 属性更改才会在对象初始化过程。 调用 BeginInit 发出信号的初始化已开始和 EndInit 发出信号的初始化已完成。 初始化后,将忽略属性更改。
TransformedBitmap 使用创建的对象 TransformedBitmap(BitmapSource, Transform) 自动初始化构造函数和属性更改将被忽略。
如果将图像保存到文件应用转换后,必须更新与图像数据相关的元数据标记。