对于这个内容,我是在学习插入图片时遇到的问题,在Windows应用中可以直接用Image类和Bitmap直接实现裁剪功能,

在wp上就不行了,后来在MSDN论坛上找到了相关方法及示例,而示例太复杂了,

我就参考https://social.msdn.microsoft.com/Forums/zh-CN/07b06a88-607b-44d8-ae5c-801d5c8b3a27上的简单示例,

因为示例没有太多注解,我在配合自己开发的程序上进行了注解和自己的理解,方便大家;

采用了WriteableBitmap类、BitmapDecoder类,好了直接上例子:

1.源图片的大小:宽140像素,高37像素;

2.我们要裁剪出的图片大小为:宽28像素,高37像素(相当于将源图片沿直线等分5份);

3.知道上两条的要求,现在我们先创建获得裁剪图片后(宽28像素,高37像素)的像素数据的方法,代码如下:

 #region
/// <summary>
/// 创建BitmapDecoder的像素转换器,并给转换设置属性(裁剪边框,缩放尺寸)
/// </summary>
/// <param name="decoder">要修改的解码数据</param>
/// <param name="startX">裁剪边框左上角X位置</param>
/// <param name="startY">裁剪边框左上角Y位置</param>
/// <param name="width">裁剪边框宽度</param>
/// <param name="height">裁剪边框高度</param>
/// <param name="scaledWidth">缩放后的像素宽度</param>
/// <param name="scaledHeight">缩放后的像素高度</param>
/// <returns></returns>
public static async Task<byte[]> GetPixelData(BitmapDecoder decoder, uint startX, uint startY, uint width, uint height, uint scaledWidth, uint scaledHeight)
{ //获取裁剪的边框尺寸,指定左上角位置(startX,startY)及裁剪高度height和宽度width;
#region define裁剪边框尺寸;
BitmapBounds bound = new BitmapBounds();
bound.X = startX;
bound.Y = startY;
bound.Width = width;
bound.Height = height;
#endregion //创建位图的像素数据的转换器
#region define转换器各属性
BitmapTransform tran = new BitmapTransform(); //将裁剪尺寸的属性bound,赋值到tran.Bounds中
tran.Bounds = bound; //define转换器中缩放尺寸,
tran.ScaledWidth = scaledWidth;
tran.ScaledHeight = scaledHeight;
#endregion //获得像素数据
var v = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, tran, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.ColorManageToSRgb);
//从像素数据中得到二进制像素数据
byte[] pixels = v.DetachPixelData();
return pixels;//返回
}
#endregion

4.接下来是对上条代码获得的像素数据按要求进行裁剪,并返回一个WriteableBitmap类型的BitmapSource:

        public async static Task<WriteableBitmap> Get_Image()
{ //获得“图片.bmp”图片文件
StorageFile imageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///PetsData/图片.bmp"));
//创建随机访问流,读出图片数据,放入到stream中
using (IRandomAccessStream stream = await imageFile.OpenAsync(FileAccessMode.Read))
{
//x,y代表图片左上角位置,width、height代表裁剪边框的大小
uint x = ;
uint y = ;
uint width = ;
uint height = ; //用解码类对数据流进行访问解码
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
//对获得的解码后的像素数据流进行修改,按边框x, y, width, height尺寸修改;
//由于不对源图片进行缩放处理,所以GetPixelData()方法后两位参数直接赋源图片的尺寸像素decoder.PixelWidth, decoder.PixelHeight;
byte[] pixels = await GetPixelData(decoder, x, y, width, height, decoder.PixelWidth, decoder.PixelHeight);
//创建可写入的BitmapSource wp;
WriteableBitmap wb = new WriteableBitmap(, );
Stream pixStream = wb.PixelBuffer.AsStream();
//写入裁剪的像素数据大小;
pixStream.Write(pixels, , pixels.Length);
//返回WriteableBitmap类型的BitmapSource
return wb;
} }

5.然后对名为"img1"的Image图像控件的Source进行赋值

this.img1.Source = await Get_Image();

6.这就大功告成了;

最后,本文没有使用编码的类BitmapEncoder,什么时候用我现在还没搞清楚,望大神们指导;

 

WP8.1开发对图片进行裁剪(截取)一部分的更多相关文章

  1. C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!

    原文:C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!! 一般我们在开发Winodws Phone APP 的时候往 ...

  2. WP8.1开发:简单天气预报应用(转)

    今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意 ...

  3. C#从大图中截取一部分图片

    #region 从大图中截取一部分图片 /// <summary> /// 从大图中截取一部分图片 /// </summary> /// <param name=&quo ...

  4. Android第三方开源图片裁剪截取:cropper

     Android第三方开源图片裁剪截取:cropper 很多app都需要裁剪截取图片作为头像.logo之类,而cropper是github上的一个针对Android平台的.第三方开源图片裁剪截取项 ...

  5. WP8.1开发:简单的天气预报应用

    今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意 ...

  6. C# 从图片中截取一部分图片,并返回所截取的图片

    /// <summary> /// 从图片中截取一部分图片 /// </summary> /// <param name="fromImagePath" ...

  7. 1_1准备工作[wp8特色开发与编程技巧]

    1准备工作 大家好,我是徐文康,今天我要开始带大家玩转windowsphone8 app的开发 在这一套视频中,我将带大家从零开始学习编程.在互联网时代熟悉编程是非常有必要的.差异化竞争将变成趋势,那 ...

  8. 质问微软 WP8.1开发HTTPS 真费劲

    本人用C#多年,WPF2年,一直想做点应用为WP生态贡献一点力量,最近终于有机会接触了 家里的本子是2年前的低压I3,不支持虚拟化,一直没有真机.最近同事妈妈换下来一个820给我拿来做开发用,非常感谢 ...

  9. (wp8.1开发)触摸键从推出变返回

    ---恢复内容开始--- 今天开发wp8.1,遇到这样一个问题,从第一个页面跳到第二个页面,在第二个页面按返回,结果程序退出了.原来是系统把返回键定义成退出了. 解决办法: 在第一个页面加入如下代码 ...

随机推荐

  1. 部分网站允许空白referer的防盗链图片的js破解代码

    Reference: http://www.114390.com/article/27125.htm Javascript源码: 复制代码代码如下: function showImg( url ) { ...

  2. mongodb学习(四)CRUD操作

    CRUD操作: 1. 插入操作: 直接使用 insert可执行单个操作,也可以执行批量操作 书上的batchInsert会报错.似乎被废弃了. db.foo.insert({"bar&quo ...

  3. Jquey里的同步请求和异步请求

    1.同步请求 发送了同步请求后  会一直等待 先执行 alert("result:" + d); temp = d;   在执行alert("this is last:& ...

  4. radiobutton设置样式

    单选题里会用到radiobutton,如果不想使用系统提供的圆圈样式,可以自定义样式,想要做成的效果就是, 使用自定义的图片替换圆圈,然后选择有4个选项的其中一个,图片上有个对勾标记, 然后如果正确选 ...

  5. literal

    literal[英][ˈlɪtərəl][美][ˈlɪtərəl]adj.照字面的; 原义的; 逐字的; 平实的,避免夸张; n.[印]错排,文字上的错误;

  6. html bottom html submit按钮表单控件与CSS美化

    一.html submit与bottom按钮基本语法结构 1.html submit按钮在input标签里设置type="submit"即可设置此表单控件为按钮. submit按钮 ...

  7. 使用PHPMailer发送带附件并支持HTML内容的邮件

    PHPMailer是一个封装好的PHP邮件发送类,支持发送HTML内容的电子邮件,以及可以添加附件发送,并不像PHP本身mail()函数需要服务器环境支持,您只需要设置邮件服务器以相关信息就能实现邮件 ...

  8. 因子分析&主成分分析

    因子分析和主成分分析的异同点: 1.主成分分析仅仅是一种数据变换而不假设数据矩阵有什么样的结构形式 因子分析假定数据有特定的模型,而且齐总的因子满足特定的条件 2.因子分析和主成分分析都是从相关矩阵出 ...

  9. 让div显示在屏幕中央的css代码段

    .popup{ width:500px; height:400px; position:absolute; top:50%; left:50%; margin-top:-200px;     /*注意 ...

  10. 在官网下载了最新版的PHP,解压后的安装包里为什么没有php5isapi.dll这个dll文件?

    因为自PHP 5.3.1版本开始,PHP便已不在支持ISAPI模式,所以你在PHP5.3.1版本以上的php目录中看不到php5isapi.dll文件. 那么,IIS6下跑PHP 5.3.1以上版本时 ...