原文:WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件

版权声明:本文为博主原创文章,需要转载尽管转载。 https://blog.csdn.net/z5976749/article/details/39671691

WPF  CtrlBook使用方法:

首先先添加引用:using WpfFlipPageControl;

dll名称:WpfFlipPageControl.dll,下载地址:http://api.dllzj.com/down/WpfFlipPageControl.dll.html

在Blend中添加ctrlBook控件(书控件)。

ctrlBook控件本身就分左右两个显示部分,如果两边都是独立的图片比较方便:

            Image im = new Image();		//这里的image对象时控件的image,不是图片的Image类
im.Source = new BitmapImage(new Uri(@"图片路径")); //Image控件添加资源
mybook.Items.Add(im); //书控件添加Image控件,也可以添加canvas等控件
im = new Image();
im.Source = new BitmapImage(new Uri(@"图片路径"));
mybook.Items.Add(im);

这样书控件就有两页了,鼠标可以在整个控件的4个角进行翻页,将图片控件的stretch属性设置成 Fill更好。

CtrlBook翻页方法: 

myBook.AnimateToNextPage(true, 1000);  

如果是一张图片要分成两份左右呈现,就需要进行一个图片分割,主要思想是一张图片分割成两个等份的图片然后分别添加进Image控件,书控件添加Image控件

首先第一张图片添加一个null,因为书控件默认从右边开始添加。

myBook.Items.Add(null); //书控件第一页为空

        /// <summary>
/// 加载图片信息
/// </summary>
private void SetBook()
{
myBook.Items.Clear();
strsPath = Directory.GetFiles(Directory.GetCurrentDirectory() + "/source/images"); //本地图片路径集合
myBook.Items.Add(null); //书控件第一页为空
//左右image容器
System.Windows.Controls.Image imageLeft = null; //system.windows.Controls这样引用是因为WPF的中有的类类名相同,必须申明命名空间才能区分
System.Windows.Controls.Image imageRight = null; System.Drawing.Bitmap bitmap = null; //创建位图对象
System.Drawing.Size size = new System.Drawing.Size(0, 0); //size对象(有2个size类,注意区分)
System.Drawing.Point point = new System.Drawing.Point(0, 0); //point对象(有2个point类,注意区分)
IntPtr intPtr= new IntPtr(); //用于表示指针或句柄的平台特定类型 foreach (string path in strsPath) //循环添加图片资源
{
//实例化左右图片控件类型,如不实例化Image控件只修改控件的Source属性 则myBook.Items 添加控件报错</span>
imageLeft = new System.Windows.Controls.Image(); //必须重新实例化image对象
imageRight = new System.Windows.Controls.Image(); bitmap = new System.Drawing.Bitmap(path); //创建一个位图对象,可以从对象中获取他本身的宽高进行size分割
size = new System.Drawing.Size(bitmap.Width / 2 , bitmap.Height); //左右两边图片的尺寸,因为分成左右两份,所以把宽除以2
//左容器图片分割
point = new System.Drawing.Point(0, 0); //分割的起点(0,0)
System.Drawing.Bitmap imageLeftShow = getImage(path, point, size);//通过分割图片得到在左边显示的位图对象
//右容器图片分割
point = new System.Drawing.Point(bitmap.Width / 2, 0);//中间开始分割,通过位图对象宽的一半
System.Drawing.Bitmap imageRightShow = getImage(path, point, size); intPtr = imageLeftShow.GetHbitmap(); //左边bitmap型图片转化成intPtr类型
//左边图片intPtr类型转型为imageSource类型</span>
imageLeft.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
intPtr = imageRightShow.GetHbitmap(); //右边图片转化成intPtr类型
imageRight.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); myBook.Items.Add(imageLeft); //书控件添加image控件
myBook.Items.Add(imageRight);
imageLeft.Stretch = Stretch.Fill;
imageRight.Stretch = Stretch.Fill;
}
} /// <summary>
/// 根据起点point,size切割图片的方法
/// </summary>
private System.Drawing.Bitmap getImage(string path, System.Drawing.Point point, System.Drawing.Size size)
{
//图片路径
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(path); //加载原来图片
//创建矩形,具有起始位置和大小
System.Drawing.Rectangle r = new System.Drawing.Rectangle(point, size); //按照位置与大小实例化一个矩阵对象
//返回矩形区域的图片副本
bitmap = bitmap.Clone(r, System.Drawing.Imaging.PixelFormat.Undefined);//按照矩阵位置大小创建原始位图某个部分的副本
return bitmap; 返回创建的位图副本
}

WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件的更多相关文章

  1. C#图片采集软件 自动翻页 自动分类(收集美图必备工具)(一)

    网站管理员希望将别人的整站数据下载到自己的网站里或者将别人网站的一些内容保存到自己的服务器上.从内容中抽取相关的字段,发布到自己的网站系统中.有时需要将网页相关的文件也保存到本地,如图片.附件等. 图 ...

  2. ViewPager实现自动翻页功能 --转载出处找不到了,根据自己的理解写个随笔方便以后的记忆以及代码的共享,感谢给我启发的那位高手--第一次写博客哈

    xml文件 textview 用于显示图片的标题 viewpager 用于实现翻页效果 <LinearLayout xmlns:android="http://schemas.andr ...

  3. 10款无限滚动自动翻页jquery插件

    2012年3月29日 无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的 结果,改变了一直以来只能通过点击下一页来翻页 ...

  4. 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!

    转--http://www.2cto.com/kf/201402/277535.html 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版! 2014-02-11     ...

  5. pyspider示例代码五:实现自动翻页功能

    实现自动翻页功能 示例代码一 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: v2ex fro ...

  6. Python-爬虫之股转系统下载文件自动翻页

    上次代码只能抓取一个网页上的链接,本次可以自主设定抓取的页面个数. 代码如下: from selenium import webdriver import os, time class Downloa ...

  7. VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。

    原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...

  8. WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定

    原文:WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定   WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM ...

  9. 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常

    代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0

随机推荐

  1. Eclipse下配置Ant脚本 自己主动打包带签名的Android apk

    尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得 ...

  2. [Angular2 Router] Setup page title with Router events

    Article import 'rxjs/add/operator/filter'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator ...

  3. GoJS超详细入门(插件使用无非:引包、初始化、配参数(json)、引数据(json)四步)

    GoJS超详细入门(插件使用无非:引包.初始化.配参数(json).引数据(json)四步) 一.总结 一句话总结:插件使用无非:引包.初始化.配参数(json).引数据(json)四步. 1.goj ...

  4. SpringMVC接受参数若干问题

    最近2年在工作问题总结中,好几次遇到了SpringMVC接收参数的问题,今天特别总结下.  SpringMVC接收参数的方法:  Html参数输入: <input name="stat ...

  5. 授人玫瑰 手留余香 --纪念python3.2.3官方文档翻译结束

    当你点击看到这篇文章的时候.你已经得到了祝福. 一个来自夜深人静的码农,在2014年5月19号的01:18分.默默为你献上祝福. 希望你.我和他,每个在IT行业中奋斗的人.能找到属于自己一片天空. 在 ...

  6. Chrome谷歌浏览器web前端开发好用插件(自己用)备忘

    Chrome谷歌浏览器web前端开发好用插件(自己用)备忘 一.总结 英语好一点的话要什么工具就直接去Chrome插件里面找非常方便. 二.测试题-简答题 1.Chrome修改页面字符集是什么? 解答 ...

  7. [React Router v4] Use the React Router v4 Link Component for Navigation Between Routes

    If you’ve created several Routes within your application, you will also want to be able to navigate ...

  8. mysqlbinlog命令使用

    常用参数:--start-datetime=datetime 从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取.datetime值相对于运行mysqlbinlog的机器上的本地 ...

  9. HTML5在客户端存储数据的新方法——localStorage

    HTML5在客户端存储数据的新方法--localStorage localStorage作为HTML5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中,而客户端一般是指上 ...

  10. js中的对象与数组

    js对象与数组是js中最基本的概念, 定义对象时可用 var a = {} 定义一个空对象 定义数组时可用 var a = [] 定义一个空字符串.. 在对象中只是存在属性,属性与值之间用" ...