UWP crop image control

简介: 原文:UWP crop image control最近做项目,需求做一个剪切图片的东东。如下图  主要是在一个canvas上面。根据crop的大小画出半透明的效果 ...
原文: UWP crop image control

最近做项目,需求做一个剪切图片的东东。如下图

 主要是在一个canvas上面。根据crop的大小画出半透明的效果

<Canvas x:Name="imageCanvas" Visibility="Collapsed" >
                           
                            <Path x:Name="nonselectRegion" Fill="#88FFFFFF"  >
                                <Path.Data>
                                    <GeometryGroup>
                                        <RectangleGeometry Rect="{Binding OuterRect}">
                                        </RectangleGeometry>
                                        <RectangleGeometry Rect="{Binding SelectedRect}">
                                        </RectangleGeometry>
                                    </GeometryGroup>
                                </Path.Data>
                            </Path>
                            <Path x:Name="selectRegion" Fill="Transparent" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1">
                                <Path.Data>
                                    <RectangleGeometry Rect="{Binding SelectedRect}"/>
                                </Path.Data>
                            </Path>
                            <Rectangle x:Name="horizontalLine" Canvas.Left="{Binding SelectedRect.Left}" Canvas.Top="{Binding HorizontalLineCanvasTop}" Height="1" Width="{Binding SelectedRect.Width}" Fill="{ThemeResource ApplicationForegroundThemeBrush}"/>
                            <Rectangle x:Name="verticalLine" Canvas.Left="{Binding VerticalLineCanvasLeft}" Canvas.Top="{Binding SelectedRect.Top}" Width="1" Height="{Binding SelectedRect.Height}" Fill="{ThemeResource ApplicationForegroundThemeBrush}"/>

                            <Rectangle x:Name="horizontalLine1" Canvas.Left="{Binding SelectedRect.Left}" Canvas.Top="{Binding HorizontalLine1CanvasTop}" Height="1" Width="{Binding SelectedRect.Width}" Fill="{ThemeResource ApplicationForegroundThemeBrush}"/>
                            <Rectangle x:Name="verticalLine1" Canvas.Left="{Binding VerticalLine1CanvasLeft}" Canvas.Top="{Binding SelectedRect.Top}" Width="1" Height="{Binding SelectedRect.Height}" Fill="{ThemeResource ApplicationForegroundThemeBrush}"/>


                            <Ellipse x:Name="topLeftThumb"  Canvas.Left="{Binding SelectedRect.Left}" Canvas.Top="{Binding SelectedRect.Top}"/>
                            <Ellipse x:Name="topRightThumb"  Canvas.Left="{Binding SelectedRect.Right}" Canvas.Top="{Binding SelectedRect.Top}"/>
                            <Ellipse x:Name="bottomLeftThumb"  Canvas.Left="{Binding SelectedRect.Left}" Canvas.Top="{Binding SelectedRect.Bottom}"/>
                            <Ellipse x:Name="bottomRightThumb"  Canvas.Left="{Binding SelectedRect.Right}" Canvas.Top="{Binding SelectedRect.Bottom}"/>

                        </Canvas>

另外一个重要的地方就是根据这个crop selection 得到剪切后的流。

代码如下:

 async static private Task<byte[]> GetPixelData(BitmapDecoder decoder, uint startPointX, uint startPointY,
            uint width, uint height, uint scaledWidth, uint scaledHeight)
        {

            BitmapTransform transform = new BitmapTransform();
            BitmapBounds bounds = new BitmapBounds();
            bounds.X = startPointX;
            bounds.Y = startPointY;
            bounds.Height = height;
            bounds.Width = width;
            transform.Bounds = bounds;

            transform.ScaledWidth = scaledWidth;
            transform.ScaledHeight = scaledHeight;

            // Get the cropped pixels within the bounds of transform.
            PixelDataProvider pix = await decoder.GetPixelDataAsync(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Straight,
                transform,
                ExifOrientationMode.IgnoreExifOrientation,
                ColorManagementMode.ColorManageToSRgb);
            byte[] pixels = pix.DetachPixelData();
            return pixels;
        }

 

在做这个控件的过程中发现了一个很有意思的东西。就是通过CameraCaptureUI 得到的图片。。看起来是旋转了90 度。。这是为什么呢??

拍照的时候是这样的

 

拍完了之后如果直接显示,却是这样的

感觉被反转了。。( ╯□╰ )。。

为什么。。等下一个随笔来说说。

有什么问题指出来,大家一起进步

 

目录
相关文章
|
安全 开发者
SwiftUI极简教程02:Image图片的使用
SwiftUI极简教程02:Image图片的使用
1490 1
SwiftUI极简教程02:Image图片的使用
|
Android开发
android10.0(Q) Camera2 保存图片角度不对和镜像问题
android10.0(Q) Camera2 保存图片角度不对和镜像问题
288 0
|
计算机视觉
【事件图像】RGB Image conversion to event Image
【事件图像】RGB Image conversion to event Image
【事件图像】RGB Image conversion to event Image
|
C++ Windows
<转>Developing Custom Draw Controls in Visual C++
原谅链接:http://msdn.microsoft.com/en-us/library/ms364048(v=vs.80).aspx     Visual Studio 2005 Tom ArcherProgram Manager, Microsoft January 2006 Applie...
1328 0
|
C# 容器
[UWP]实用的Shape指南
原文:[UWP]实用的Shape指南 在UWP UI系统中,使用Shape是绘制2D图形最简单的方式,小到图标,大到图表都用到Shape的派生类,可以说有举足轻重的地位。幸运的是从Silverlight以来Shape基本没有什么大改动,简直是UWP中的一股清流。
859 0
|
C#
[UWP]不怎么实用的Shape指南:自定义Shape
原文:[UWP]不怎么实用的Shape指南:自定义Shape 1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到。写出来是因为反正都学了,当作写个笔记。
756 0
|
前端开发 C#
WPF: Creation of Text Labels for 3D Scene
原文:WPF: Creation of Text Labels for 3D Scene 转载:http://www.
3424 0
|
前端开发 Android开发 Python
|
开发工具 Windows C++