UWP 裁切 SoftwareBitmap

简介: //设置源图ImageSource为WriteableBitmap类型 BitmapImage himage = this.imageTarget2.Source as BitmapImage; RandomAccessStreamReference random = RandomAccessStreamReference.
  //设置源图ImageSource为WriteableBitmap类型
            BitmapImage himage = this.imageTarget2.Source as BitmapImage;

            RandomAccessStreamReference random = RandomAccessStreamReference.CreateFromUri(himage.UriSource);

            using (IRandomAccessStream stream = await random.OpenReadAsync())
            {
                stream.Seek(0);
                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
                BitmapFrame bitmapFrame = await decoder.GetFrameAsync(0);
                // Get the pixels
                var transform = new BitmapTransform { ScaledWidth = decoder.PixelWidth, ScaledHeight = decoder.PixelHeight };
                PixelDataProvider dataProvider =
                    await bitmapFrame.GetPixelDataAsync(BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Straight,
                        transform,
                        ExifOrientationMode.RespectExifOrientation,
                        ColorManagementMode.ColorManageToSRgb);

                var image_array = dataProvider.DetachPixelData();
                var image_array_width = (int)decoder.PixelWidth;
                var image_array_height = (int)decoder.PixelHeight;
                var writeableBitmap = new WriteableBitmap(image_array_width, image_array_height);
                stream.Seek(0);
                await writeableBitmap.SetSourceAsync(stream);
                this.imageSource1.Source = writeableBitmap;//WriteableBitmap 类型很重要
            }

 

  //裁切方法
        public async static Task<SoftwareBitmap> GetCroppedBitmapAsync(SoftwareBitmap softwareBitmap, uint x, uint y, uint width, uint height)
        {
            using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
            {
                BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);

                encoder.SetSoftwareBitmap(softwareBitmap);

                encoder.BitmapTransform.Bounds = new BitmapBounds()
                {
                    X = x,
                    Y = y,
                    Height = height,
                    Width = width
                };

                await encoder.FlushAsync();

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                return await decoder.GetSoftwareBitmapAsync(softwareBitmap.BitmapPixelFormat, softwareBitmap.BitmapAlphaMode);
            }
        }

 

            //实例:
            WriteableBitmap wb = this.imageSource1.Source as WriteableBitmap; ;
            SoftwareBitmap sb = new SoftwareBitmap(BitmapPixelFormat.Bgra8, wb.PixelWidth, wb.PixelHeight);
            sb.CopyFromBuffer(wb.PixelBuffer);//WriteableBitmap转为SoftwareBitmap
            var sbmp = await GetCroppedBitmapAsync(sb, 0, 50, 100, 100);//调用裁切方法
            WriteableBitmap writeableBitmap = new WriteableBitmap(sbmp.PixelWidth, sbmp.PixelHeight);
            sbmp.CopyToBuffer(writeableBitmap.PixelBuffer);//SoftwareBitmap转为WriteableBitmap
            this.imageTarget2.Source = writeableBitmap;//设置目标图ImageSource为WriteableBitmap类型

 

目录
相关文章
|
Android开发
关于安卓竖直滚动文字自定义控件的探索
安卓竖直滚动文字自定义控件
130 0
|
C#
WPF模糊和阴影效果
<Button Content="Button" HorizontalAlignment="Left" Margin="31,234,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.
1532 0
|
Windows
[UWP]使用AdaptiveTrigger实现自适应布局
原文:[UWP]使用AdaptiveTrigger实现自适应布局 这篇博客将介绍如何在UWP开发中使用AdaptiveTrigger实现自适应布局。 场景1:窗体宽度大于800时,窗体背景色为绿色,窗体在0到800之间为蓝色。
1013 0
|
C#
WPF下字体模糊的问题
原文:WPF下字体模糊的问题 一直以来,发现WPF中的小字体下的文字变得比较模糊,比如: WPF与Winform字体显示比较: 为了看到更清楚,我们放大点显示:  放得更大些: 中文、日文等亚洲文字的显示也存在着类似的问题:在XP操作系统中的效果:(Winform中)Vista下日文的显示效果:(WPF中) 放大点:XP中:Vista中: 很显示,WPF中变得模糊了。
1384 0
|
C#
WPF 关于圆角的制作
原文:WPF 关于圆角的制作 1、使用Boder(一般情况): 设置CornerRadius属性   ...   2、创建ClippingBorder类: View Code using System; using System.
1395 0
Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
原文:Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)   模糊效果(BlurEffect)与阴影效果(DropShadowEffect)是两个非常实用和常用的两个特效,比如在开发相册中,可以对照片的缩略图添加模糊效果,在放大照片的过程中动态改变照片的大小和模糊的透明度来达到一个放大透明的效果。
1085 0
|
关系型数据库 C#
WPF Clip实现百叶窗
原文:WPF Clip实现百叶窗 效果图; 后台代码: public MainWindow()         {             InitializeComponent();       ...
1155 0
|
Web App开发 C# Windows
WPF图片浏览器(显示大图、小图等)
原文:WPF图片浏览器(显示大图、小图等) 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/46784601 1.概述                最近利用WPF做了一个图片浏览器,能够将文件夹中的所有图片以小图的形式显示,并将选中的图片以512*512大小显示。
2638 0
|
C#
WPF图片放大后模糊的解决方法
原文:WPF图片放大后模糊的解决方法 WPF中显示图片的方式很多,可以用Image控件来显示图像,或者直接设置一个控件的Background。
1352 0
|
编解码 C#
WPF 获取屏幕分辨率(获取最大宽高)等
原文:WPF 获取屏幕分辨率(获取最大宽高)等 double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.
1482 0