WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件
原文:WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件
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 书控件的更多相关文章
- C#图片采集软件 自动翻页 自动分类(收集美图必备工具)(一)
网站管理员希望将别人的整站数据下载到自己的网站里或者将别人网站的一些内容保存到自己的服务器上.从内容中抽取相关的字段,发布到自己的网站系统中.有时需要将网页相关的文件也保存到本地,如图片.附件等. 图 ...
- ViewPager实现自动翻页功能 --转载出处找不到了,根据自己的理解写个随笔方便以后的记忆以及代码的共享,感谢给我启发的那位高手--第一次写博客哈
xml文件 textview 用于显示图片的标题 viewpager 用于实现翻页效果 <LinearLayout xmlns:android="http://schemas.andr ...
- 10款无限滚动自动翻页jquery插件
2012年3月29日 无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的 结果,改变了一直以来只能通过点击下一页来翻页 ...
- 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!
转--http://www.2cto.com/kf/201402/277535.html 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版! 2014-02-11 ...
- pyspider示例代码五:实现自动翻页功能
实现自动翻页功能 示例代码一 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: v2ex fro ...
- Python-爬虫之股转系统下载文件自动翻页
上次代码只能抓取一个网页上的链接,本次可以自主设定抓取的页面个数. 代码如下: from selenium import webdriver import os, time class Downloa ...
- VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。
原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...
- WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定
原文:WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM ...
- 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常
代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0
随机推荐
- Ubuntu下成功安装QQ2013
阳光小强最近用Win8系统感觉特别不爽,中午果断换了一个win7系统,又想着能不能搞个双系统(最近在看一些linux东西),于是就开始整起来.结果并不好,linux虽然整好了,但是硬盘全部格式化了,当 ...
- MySQL5.7 四种日志文件
mysql 日志包括:错误日志,二进制日志,通用查询日志,慢日志等 一:通用查询日志: 记录建立的客户端连接和执行的语句 1)show variables like '%verision%'; 显示数 ...
- 小强的HTML5移动开发之路(52)——jquerymobile中的触控交互
当使用移动设备进行触控操作时,最常用的就是轻击.按住屏幕或者手势操作,jQuery Mobile可以通过绑定的触控事件来响应使用者的特定触控行为. 一.轻击与按住 直接上代码(一切皆在代码中,细细品吧 ...
- vimrum
# Insert your preferred key mappings here.unmap <a-O>map <a-O> closeOtherTabsmap , previ ...
- [Angular] Wrap a third party lib into service
- Android 离线语音用法(讯飞语音)
这次给大家带来的是项目的离线语音功能. 讯飞开放平台中的离线语音 首先创建开放平台的账号.这个不必多说 然后创建新应用 选择我的应用,例如以下图,注意下我打马赛克的地方,这个appId非常重要 点击进 ...
- .NETCore 实现容器化Docker与私有镜像仓库管理
原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技 ...
- Linux安装.Net core 环境并运行项目
原文:Linux安装.Net core 环境并运行项目 一 安装环境 1. 从微软官网下载 Linux版本的.NetCoreSdk 2.0 安装包 打开终端: 第一步: sudo yum insta ...
- amazeui时间组件测试
amazeui时间组件测试 一.总结 一句话总结: 1.图标是字体样式:input右侧的字体图标是字体样式,所以要引入字体文件,随便找一个项目把里面的字体文件弄过来就ok了 2.多看官方文档:这个时间 ...
- Erlang入门
Erlang简史(翻译) Erlang入门(二)—并发编程 Erlang入门(三)——分布式编程 Erlang入门(四)——错误处理和鲁棒性 Erlang入门(五)——补遗