wpf CroppedBitmap

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) 自动初始化构造函数和属性更改将被忽略。

如果将图像保存到文件应用转换后,必须更新与图像数据相关的元数据标记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值