前台准备两个Image控件。上面是显示原图,下面显示切割后的效果。

  1. <StackPanel Orientation="Vertical">
  2. <Image Width="450" Height="383" Source="C:\Users\Administrator\Documents\Visual Studio 2015\Projects\SplitPic\SplitPic\Images\1.jpg"/>
  3. <Image x:Name="img" Stretch="None" Width="450" Height="383" />
  4. </StackPanel>

对应的后台代码:

  1. public partial class MainWindow : Window
  2. {
  3. public MainWindow()
  4. {
  5. InitializeComponent();
  6. // 设置原图
  7. img.Source = new BitmapImage(new Uri(@"Images/1.jpg", UriKind.Relative));
  8. // 切割图片
  9. ImageSource imageSource = img.Source;
  10. Bitmap bitmap = SystemUtils.ImageSourceToBitmap(imageSource);
  11. BitmapSource bitmapSource = SystemUtils.BitmapToBitmapImage(bitmap);
  12. BitmapSource newBitmapSource = SystemUtils.CutImage(bitmapSource, new Int32Rect(125, 60, 235, 285));
  13. // 使用切割后的图源
  14. img.Source = newBitmapSource;
  15. }
  16. }
  17. // 图像工具类
  18. public static class SystemUtils
  19. {
  20. /// <summary>
  21. /// 切图
  22. /// </summary>
  23. /// <param name="bitmapSource">图源</param>
  24. /// <param name="cut">切割区域</param>
  25. /// <returns></returns>
  26. public static BitmapSource CutImage(BitmapSource bitmapSource, Int32Rect cut)
  27. {
  28. //计算Stride
  29. var stride = bitmapSource.Format.BitsPerPixel * cut.Width / 8;
  30. //声明字节数组
  31. byte[] data = new byte[cut.Height * stride];
  32. //调用CopyPixels
  33. bitmapSource.CopyPixels(cut, data, stride, 0);
  34. return BitmapSource.Create(cut.Width, cut.Height, 0, 0, PixelFormats.Bgr32, null, data, stride);
  35. }
  36. // ImageSource --> Bitmap
  37. public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource)
  38. {
  39. BitmapSource m = (BitmapSource)imageSource;
  40. System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(m.PixelWidth, m.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
  41. System.Drawing.Imaging.BitmapData data = bmp.LockBits(
  42. new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
  43. m.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data);
  44. return bmp;
  45. }
  46. // Bitmap --> BitmapImage
  47. public static BitmapImage BitmapToBitmapImage(Bitmap bitmap)
  48. {
  49. using (MemoryStream stream = new MemoryStream())
  50. {
  51. bitmap.Save(stream, ImageFormat.Bmp);
  52. stream.Position = 0;
  53. BitmapImage result = new BitmapImage();
  54. result.BeginInit();
  55. // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."
  56. // Force the bitmap to load right now so we can dispose the stream.
  57. result.CacheOption = BitmapCacheOption.OnLoad;
  58. result.StreamSource = stream;
  59. result.EndInit();
  60. result.Freeze();
  61. return result;
  62. }
  63. }
  64. }

运行后的效果如下:

补充:关于剪裁的位置和区域的填写说明,如下图。

【C#/WPF】图片的切割/切图/裁剪图片的更多相关文章

  1. 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移

    解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...

  2. 切图时图片的选择:JPG、PNG、GIF的区别

    目前网站图片的采用一共有流行三种,分别是JPG.PNG.GIF,然而很多人并不知道三者在选择的时候究竟应该选谁.虽然都可以存储图片,但是如果要发布到网上,就必须考虑速度.大小和失真程度的问题.如果你运 ...

  3. java 切图 判断图片是否是纯色/彩色图片

    首先上切图的代码 /** * 图片剪裁 * @param x 距离左上角的x轴距离 * @param y 距离左上角的y轴距离 * @param width 宽度 * @param height 高度 ...

  4. android 开发 实现一个进入相机拍照后裁剪图片或者进入相册选中裁剪图片的功能

    实现思维路径: 以进入相机拍照的思维路线为例子: 1.进入app 2.判断之前是否保存头像,如果有就显示历史图像 (下面代码中在getOldAvatar();方法中执行这个逻辑) 3.点击更换图像的B ...

  5. 两种ps切图方法(图层/切片)

    两种Ps切图方法 一.      基础操作: a)    Ctrl++ 放大图片,ctrl - -缩小图片 b)    按住空格键space+,点击鼠标左键,拖动图片. c)    修改单位,点击编辑 ...

  6. 【前端GUI】—— 前端设计稿切图通用性标准

    前言:公司在前端组和视觉组交接设计稿切图的时候,总会因为视觉组同事们对前端的实现原理不清楚而出现各种问题,在用的时候还得再次返工,前端组同事们一致觉得应该出一份<设计稿切图通用性标准文件> ...

  7. PS切图导出代码后出现的图片布局散乱的解决方法——table布局

    前言: 一般来说,大部分美工PS切图后导出的都是使用PS默认的table布局的页面,出现最多的异常是上传代码,替换图片后,发现图片布局散乱,完全不是想要的效果.轻微的是浏览器不兼容,只有部分浏览器可以 ...

  8. 使用PHP写了一个图片分割等份工具,便于前台页面切图时使用。

    目的: 由于网站更新活动较频繁,其大多数以静态图片为主,设计人员在除了设计图后都要给前端制作人员再次切图从而达到页面加载图片缓慢的问题,为了减少工作量做了该工具. 功能: 上传一张图,将其分割成指定等 ...

  9. 教你用canvas打造一个炫酷的碎片切图效果

    前言 今天分享一个炫酷的碎片式切图效果,这个其实在自己的之前的博客上有实现过,本人觉得这个效果还是挺炫酷的,这次还是用我们的canvas来实现,代码量不多,但有些地方还是需要花点时间去理解的,需要点数 ...

随机推荐

  1. MongoDB: 聚集管道

    在MongoDB2.2新出现的. 聚集管道式基于数据处理管道概念建模的数据聚集框架.文档进入一个多阶段能将该文档转化为聚集结果的管道. 聚集管道提供了map-reduce方法了替代物,并在非常多聚集任 ...

  2. TP3.2校验微信公众号||小程序 服务器地址

    1.在TP3.2里面,写一个控制器,用来校验微信公众号||小程序的服务器地址 <?php namespace Home\Controller; use Think\Controller; hea ...

  3. PHP-九个非常有用的功能[转]

    1. 函数的任意数目的参数你可能知道PHP允许你定义一个默认参数的函数.但你可能并不知道PHP还允许你定义一个完全任意的参数的函数下面是一个示例向你展示了默认参数的函数:// 两个默认参数的函数fun ...

  4. maven 继承关系和聚合

    maven继承管理 让版本的管理只在一个地方改变 modules用于聚合,把执行的项目都放到同一的地方用module包括,可以省去一个个项目去mvn install,这样可以所有项目一次聚合 mvn ...

  5. HDUOJ---------2255奔小康赚大钱

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. 机器学习性能度量指标:AUC

    在IJCAI 于2015年举办的竞赛:Repeat Buyers Prediction Competition 中, 很多参赛队伍在最终的Slides展示中都表示使用了 AUC 作为评估指标:     ...

  7. 教你动手做一个 iOS 越狱 app

    前言 俗话说得好, 万事开头难. 仅仅是上图一个如此简单地不能再简单的小app, 其实都不算是app, 只是注入了一段代码进系统中, 等到特定的函数方法调用的时候就会被我们hook掉, 执行我们写的代 ...

  8. 【LeetCode】114. Distinct Subsequences

    Distinct Subsequences Given a string S and a string T, count the number of distinct subsequences of  ...

  9. 能让你聪明的工作DEAL四法则,来自《每周工作四小时》书籍

    来自书籍<每周工作四小时>,作者蒂莫西·费里斯(Tim Ferriss,昵称:蒂姆)   能让你聪明的工作DEAL四法则: 第一步:D——定位(Definition) 第二步:E——精简( ...

  10. PLSQL常用配置之窗口/版面保存、SQL格式化/美化、SQL注释\去掉注释等快捷键配置、登陆历史修改配置

    http://blog.csdn.net/hyeidolon/article/details/8251791   PLSQL常用配置之窗口/版面保存.SQL格式化/美化.SQL注释\去掉注释等快捷键配 ...