说位图,先把image控件简单过下,Image的Source设置

<Image Name="img" Source="可以是网络图片的Uri、应用文件的Uri或者安装包文件的Uri" />
img.Source = new BitmapIamge(new Uri(同上));

Image的Stretch属性指定图像如何填充,枚举定义:

None,图像不拉伸,一合适尺寸显示;

Uniform,保留图像的纵横比,按控件的大小输出图像;

UnifToFill,已原始大小比填充;

Fill,将整个图完全填充到控件中

Clip属性是UIElement的属性,所以所有的UI对象都有,Clip属性可用来剪切图像

    <Grid Background="Black"          PointerMoved="Grid_PointerMoved">        <Image Name="ContentPanel" Source="ms-appx:///Assets/Logo.scale-240.png">            <Image.Clip>                <RectangleGeometry x:Name="geometry" Rect="0,0,150,150" />            </Image.Clip>        </Image>    </Grid>

        private void Grid_PointerMoved(object sender, PointerRoutedEventArgs e)        {            Point p = e.GetCurrentPoint(ContentPanel).Position;            geometry.Rect = new Rect(p.X, p.Y, 150, 150);        }

效果图,就不切了,自己下来弄下,就知道了。我们截取了图像,如何生成图片呢?使用RenderTragetBitmap类

        //PointerReleased可以捕获单击事件
        private async void root_PointerReleased(object sender, PointerRoutedEventArgs e)
        {
            //创建RenderTargetBitmap对象
            RenderTargetBitmap bitmap = new RenderTargetBitmap();
            //root为UIElement的Name
            await bitmap.RenderAsync(root);
            img.Source = bitmap;
        }

生成图片之后,就是存储图片了,存储图片就需要获得图像的二进制数据,然后通过BitmapEncoder类实现对图像的创建、编辑和保存的各种方法。示例如下:

    <Grid Name="root">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <StackPanel Name="TitlePanel" Margin="10,35,10,10">
            <TextBlock Text=" />
            <TextBlock Text=" />
        </StackPanel>
        <Grid Name=" Margin="10,0,10,10">
            <Image Name="img" />
        </Grid>
        <Grid Grid.Row=">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="获取图像" Click="Button_Click_1" />
            <Button VerticalAlignment=" />
        </Grid>
    </Grid>
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            img.Source = new BitmapImage(new Uri("ms-appdata:///local/testBitmap.png",UriKind.Absolute));
        }

        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            //创建要存储的文件,这个不需多说了。
            var storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("testBitmap.png", CreationCollisionOption.OpenIfExists);

            RenderTargetBitmap bitmap = new RenderTargetBitmap();
            await bitmap.RenderAsync(root);

            //获取图像的二进制数据
            var pixelBuffer = await bitmap.GetPixelsAsync();

            using (var fileStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
            {
                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);
                encoder.SetPixelData(
                    BitmapPixelFormat.Bgra8,//像素格式
                    BitmapAlphaMode.Ignore,//像素数据的alpha模式,定义透明的
                    (uint)bitmap.PixelWidth,//像素宽
                    (uint)bitmap.PixelHeight,//像素高
                    DisplayInformation.GetForCurrentView().LogicalDpi,//像素水平分辨率,这个就是获取设备的屏幕分辨率的方法
                    DisplayInformation.GetForCurrentView().LogicalDpi,//像素垂直分辨率
                    pixelBuffer.ToArray());//像素数据

                await encoder.FlushAsync();
            }

            await new MessageDialog("获取图像成功并已保存").ShowAsync();
        }

好了,位图编程就到这儿。

最新文章

  1. JavaScript随笔3
  2. Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化
  3. C# 版本的冒泡排序,包括该死的控制台读取
  4. python中requests
  5. sql查询,如何增加一列
  6. php学习笔记1--开发环境搭建:apache+php+mysql
  7. 反射---Java高级开发必须懂的
  8. OpenCV——手势识别
  9. UML和绘图工具Visio介绍
  10. jquery.proxy的四种使用场景及疑问
  11. 第一章:eclipse 中修改字体大小和编码格式
  12. jvm中的垃圾回收器
  13. 自己动手编写IOC框架(二)
  14. [BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)
  15. .net 小程序获取用户UnionID
  16. 获取C#中方法的执行时间及其代码注入
  17. vue.js 使用时间组件 日期少一天的问题
  18. Class中的getClasses与getDeclaredClasses方法作用于区别
  19. opencv学习笔记(九)Mat 访问图像像素的值
  20. Model操作补充

热门文章

  1. C语言:宽字符集操作函数
  2. 前端存储之Web Sql Database
  3. 【Excle数据透视表】如何利用图标集将销售数据划分为五个等级
  4. JavaScript 匹配浮点数
  5. (二)Thymeleaf标准表达式之——简单表达式
  6. Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库
  7. [linux]top命令详解-实时显示系统中各个进程的资源占用状况
  8. Android开发_Animation
  9. OrCAD16.6中对比两份DSN文件的方法
  10. python中常用的base64 md5 aes des crc32等的加密解密