WindowsPhone中在大图中截取小图(图片分割)
最近发现手机QQ上面的个人资料里面有一个照片展示功能,当好友查看自己名片时,会一次展示八张图片用于展示自己。
可是这八张图片都是小图展示,我想为什么不能把八张图片合成一张大图来显示呢,这样是不是更个性化一些呢?
于是,我想做一个小应用,用来选取图片并切割成八份,保存。由用户在QQ软件中将图片按序上传,不就能达到拼接的效果了吗!
下面讲讲图片分割的原理
方法是使用WriteableBitmap截图后, 再通过变换大图的RenderTransform
将小图的起始点移动到大图起始点,最后再用与小图面积相同的小容器装载大图
最后用WriteableBitmap截取小容器返回为小图片资源.... 很绕,不过很好用。
软件效果图:
选择适当图片并按比例截取
保存的照片效果
1 private void btnSavePhotos_Click(object sender, RoutedEventArgs e) 2 { 3 4 WriteableBitmap w1 = new WriteableBitmap(image, null);//截取大图先 5 //开始循环切图 6 for (int i = 7; i >=0; i--) 7 { 8 //传递参数到裁剪方法中(大图的位图,小图的起点x和y,长和宽) 9 CutImage(w1, (i % 4) * 120, Math.Floor(i / 4) * 120, 120, 120,i); 10 } 11 } 12 13 private void CutImage(WriteableBitmap wb, double x, double y, double width, double height,int imageId) 14 { 15 // 裁剪方法 16 Image img1 = new Image(); 17 img1.Stretch = Stretch.None; 18 //移动大图的起点到小图起点 19 img1.RenderTransform = new TranslateTransform { X = -1 * x, Y = -1 * y }; 20 img1.Source = wb; 21 Canvas C = new Canvas(); 22 C.Width = width; 23 C.Height = height; 24 C.Children.Add(img1); 25 WriteableBitmap bitmap = new WriteableBitmap(C, null); 26 using (MemoryStream stream = new MemoryStream()) 27 { 28 Extensions.SaveJpeg(bitmap, stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); 29 using (MediaLibrary library = new MediaLibrary()) 30 { 31 library.SavePicture("/" + "QQImageWall" + "-"+ imageId, stream.ToArray()); 32 } 33 } 34 }
等待商城的审核!
转载于:https://www.cnblogs.com/EagleMeng/archive/2013/05/26/3099949.html