【技术实现步骤摘要】
一种基于WPF减少图片内存占用的方法、装置及其相关介质
[0001]本专利技术涉及图片显示
,特别涉及一种基于WPF减少图片内存占用的方法、装置及其相关介质。
技术介绍
[0002]现在技术中利用WPF桌面应用程序(WPF指的是一个基于windows.NETFramework的用户界面框架,用于用户图形界面开发,底层基于DirectX进行图形界面渲染,支持2D和3D矢量渲染,使用的是C#编程,下同)的列表集合控件中自带的UI虚拟化控件和虚拟化堆栈面板控件来显示大量图片数据,但是存在缺点,即只能显示一行或者一列,并且在显示大量图片数据时,滚动条滚动过程到达内存峰值,容易导致应用程序闪退。此时,出现了相关的解决方案,即在列表集合控件中使用不带UI虚拟化的网格布局控件或者自动换行布局控件来显示大量图片数据,避免了内存闪退问题,但需要手动去点击翻页按钮进行翻页显示,导致浏览图片数据不方便。
技术实现思路
[0003]本专利技术实施例提供了一种基于WPF减少图片内存占用的方法、装置及其相关介质,旨在解决现有技术中利用WPF桌面应用程序的列表集合控件来显示大量图片数据,容易导致内存闪退以及无法自动换行的问题。
[0004]第一方面,本专利技术实施例提供了一种基于WPF减少图片内存占用的方法,包括:
[0005]利用虚拟化堆栈面板控件和自动换行面板控件创建虚拟化自动换行面板控件;
[0006]将所述虚拟化自动换行面板控件设置到WPF的列表集合控件的数据项布局面板控件,得到第一设置结果; ...
【技术保护点】
【技术特征摘要】
1.一种基于WPF减少图片内存占用的方法,其特征在于,包括:利用虚拟化堆栈面板控件和自动换行面板控件创建虚拟化自动换行面板控件;将所述虚拟化自动换行面板控件设置到WPF的列表集合控件的数据项布局面板控件,得到第一设置结果;继承多值转换器接口以创建图片缩略图值转换器,并利用所述图片缩略图值转换器处理所述列表集合控件的滚动条事件,得到滚动条处理结果;根据所述滚动条处理结果进行图片解码以生成缩略图,并将所述缩略图赋值到图片控件;将所述图片控件添加到创建的数据模板,并将所述数据模板设置到所述列表集合控件的数据项模板,得到第二设置结果;其中,所述图片控件绑定图片数据和所述图片缩略图值转换器;将所述图片数据设置到所述列表集合控件的数据集合源,得到第三设置结果;基于所述第一设置结果、第二设置结果和第三设置结果,对图片进行自动换行和异步解码,得到图片输出结果。2.根据权利要求1所述的基于WPF减少图片内存占用的方法,其特征在于,所述利用虚拟化堆栈面板控件和自动换行面板控件创建虚拟化自动换行面板控件,包括:复制所述虚拟化堆栈面板控件的源代码,得到第一基础面板控件;获取所述第一基础面板控件的滚动视图控件,并将所述滚动视图控件的水平滚动条设置为隐藏和禁用,得到第二基础面板控件;根据所述自动换行面板控件分别对所述第二基础面板控件中的测量空间布局大小方法和排列控件最终区域方法进行修改,得到所述虚拟化自动换行面板控件。3.根据权利要求2所述的基于WPF减少图片内存占用的方法,其特征在于,所述利用虚拟化堆栈面板控件和自动换行面板控件创建虚拟化自动换行面板控件,还包括:根据所述虚拟化自动换行面板控件遍历得到所述列表集合控件中的列表项控件;判断所述列表项控件的坐标和大小范围是否在可见区域内,若所述列表项控件的坐标和大小范围均在可见区域内,则再次判断所述列表项控件是否存在所述列表集合控件中,若不存在,则创建所述列表项控件并添加到所述列表集合控件;若存在,则无需操作;若所述列表项控件的坐标和大小范围均不在可见区域内,则将所述列表项控件从所述列表集合控件进行删除。4.根据权利要求1所述的基于WPF减少图片内存占用的方法,其特征在于,所述继承多值转换器接口以创建图片缩略图值转换器,并利用所述图片缩略图值转换器处理所述列表集合控件的滚动条事件,得到滚动条处理结果,包括:利用所述图片缩略图值转换器创建静态线程和字典;通过所述多值转换器接口中的转换方法,传递所述图片数据和图片控件以添加到所述字典;其中,所述图片控件作为所述字典的键,所述图片数据作为字典的值;利用视觉树帮助类中的获取父类方法获取所述图片控件的父类,并向上递归得到所述列表集合控件上的滚动视图控件;利用视觉树帮助类中的获取子类方法获取所述滚动视图控件的子类,并向下递归得到垂直滚动条;
通过在所述垂直滚动条上注册鼠标抬起事件,利用所述鼠标抬起事件发送信号通知所述静态线程从所述字典中读取数据进行图片解码,同时设置所述图片控件为默认静态图片并判断鼠标是否按下且光标悬浮在所述垂直滚动条上,若是,则不进行图片解码;若否,则直接发送信号通知所述静态线程从所述字典中读取数据...
【专利技术属性】
技术研发人员:谭志文,
申请(专利权)人:深圳软牛科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。