Android MUPDF阅读器放大模糊优化
Android MUPDF阅读器放大模糊优化
目录
- Android MUPDF阅读器放大模糊优化
- 目录
- 前言
- MUPDF绘制原理
- 解决方法
- 绘制你需要大小的bitmap
- 更新View
- 结果
前言:
问题原因——pdf格式的电子书分三种,定义为A,B,C,A是扫描版,B是非扫描版正常版(格式不是很复杂),C非扫描版不正常版(格式很复杂的那种),mupdf是加载pdf格式速度最快的框架,据了接当前一家大的pdf阅读器运用此框架开发的.存在的问题:mupdf在加载A,B类pdf时速度很快,在加载C类的时候遇到瓶颈,本文解决的是在加载后PDF文本放大过程有一段很长时间的模糊问题.
MUPDF绘制原理
mupdf在绘制的时候,绘制的Bitmap大小是屏幕尺寸的大小,在
public void setPage(int page, PointF size) {}
中size是native层获取的pdf尺寸大小传到词方法中.
在setPage方法中有两个重要的字段来计算得到手机屏幕大小的bitmap尺寸:
mSourceScale = Math.min(mParentSize.x/size.x, mParentSize.y/size.y);
mSize = new Point((int)(size.x*mSourceScale), (int)(size.y*mSourceScale));
mSourceScale系数是pdf尺寸映射到手机当前屏幕大小的系数,用它可换算出当前显示的尺寸大小值存在mSize中,在绘制页面的时候根据此mSize来绘制当前的bitmap,绘制的方法是
mDrawEntire = new AsyncTask<Void,Void,Bitmap>() {protected Bitmap doInBackground(Void... v) {return drawPage(mSize.x, mSize.y, 0, 0, mSize.x, mSize.y);}
在pdf放大后根据缩放比例计算出放大系数重新drawPage
v[0].bm = drawPage(v[0].patchViewSize.x,v[0].patchViewSize.y,v[0].patchArea.left, v[0].patchArea.top,v[0].patchArea.width(), v[0].patchArea.height());
mupdf绘制的总是当前屏幕尺寸大小的bitmap,所以在C类的pdf电子书放大时存在很长一段模糊过程.
解决方法
一次性渲染好—-放大后uptate拖动不会模糊.
1.绘制你需要大小的bitmap
修改drawPage方法传入的参数:
mDrawEntire = new AsyncTask<Void,Void,Bitmap>() {protected Bitmap doInBackground(Void... v) {return drawPage(mSize.x*2, mSize.y*2, 0, 0, mSize.x*2, mSize.y*2);}
这里就是一次性绘制好需要大小的bitmap.
2.更新View
监听放大操作,在放大更新View 执行updaePage() native方法.不要走drawPage().
mDrawPatch = new AsyncTask<PatchInfo,Void,PatchInfo>() {protected PatchInfo doInBackground(PatchInfo... v) {if (!v[0].completeRedraw) {v[0].bm = drawPage(v[0].patchViewSize.x, v[0].patchViewSize.y,v[0].patchArea.left, v[0].patchArea.top,v[0].patchArea.width(), v[0].patchArea.height());} else {//放大走此方法v[0].bm = updatePage(v[0].bmh, v[0].patchViewSize.x, v[0].patchViewSize.y,v[0].patchArea.left, v[0].patchArea.top,v[0].patchArea.width(), v[0].patchArea.height());}return v[0];}
结果
一次性渲染好后放大就不会存在一段模糊的过程,此方法以牺牲内存来换取体验速度.(ps,原先占的内存是78MB,优化后测试内存大小是112MB).
Android MUPDF阅读器放大模糊优化相关推荐
- 基于Android的看小说APP源码Android本科毕业设计Android小说阅读器、小说APP源码
基于kotlin + 协程 + MVVM 模式来编写的看小说APP. 完整代码下载地址:基于Android的看小说APP源码Android本科毕业设计Android小说阅读器.小说APP源码 主要框架 ...
- Android小说阅读器
这是早期做的一个 android小说阅读器项目,是本地阅读器,没有联网功能,目前只支持txt格式. 但项目功能是比较齐全的: 文件预览 导入书籍 创建分类 批量管理书架上的图书 小说阅读 查看书籍目录 ...
- chrome pdf android,Android PDF阅读器 (基于谷歌平台的Adobe Reader)
Android PDF阅读器 (基于谷歌平台的Adobe Reader):Adobe Reader 是用于打开和使用在 Adobe Acrobat 中创建的 Adobe PDF 的工具. 虽然无法在 ...
- Android电子书阅读器的设计与实现
Android电子书阅读器 包括Android客服端和jsp服务端 主要有,在线图书,本地图书,用户设置,书签管理,JSP后台,可以管理用户帐号,图书信息管理 我的QQ 609085431
- Android电子书阅读器小程序(txt)
Android电子书阅读器小程序(txt) 开发环境 JDK 1.8 操作系统 Windows×32位或64位 可行性分析 技术可行性: 本项目应用的均是上课所学习的内容. 软件可行性: 用平时学习的 ...
- Android 文本阅读器源代码 学习
1 来源 http://www.apkbus.com/android-83021-1-1.html 从这个地方下载了一个android 文本阅读器,比较简单,稍微分析以下. 2 代码不是很难,记录以下 ...
- android rss阅读器实现
android rss阅读器实现 http://www.cnblogs.com/leipei2352/archive/2011/09/07/2170096.html
- Android MuPDF 阅读PDF文件
MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...
- 记一个简单Android图书阅读器的制作过程
记一个简单图书阅读器的制作过程 微澜 2018/9/27 qq:9611153 从有个想法,到到一个可用程序,断断续续几个月,花上不少的功夫,即便是简单的程序一个人写下来也是很难的.越写越是发现,想要 ...
最新文章
- 【c语言】蓝桥杯算法训练 十进制数转八进制数
- VC 在CStatic控件上绘图
- wxWidgets:wxConfigBase类用法
- 1.4 Hive和数据库的比较
- ppt文件限打开次数_PPT冷知识25条!看到第一条我就翻了车…
- 决胜蓝桥杯python组-集合、字典
- 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
- putty-不输入密码直接登陆
- halcon学习之边缘检测
- 认真去做,我会做得很棒!
- Java实现俄罗斯方块游戏(简单版)
- keras 基础入门整理
- [Unity]腾讯SDK踩坑之路(3)--米大师坑 + MSDK坑 (2)
- 宅男也可变形男-我是如何在11个月零27天减掉80斤的
- java系列 - entity,vo转换
- IVMS-5000海康平台安装
- 怎么看计算机配置好不好,电脑参数怎么看
- win10打开蓝牙_win10蓝牙开关不见了
- Linux Panic 机制解析
- 小型趋势指标、中型趋势指标和主要趋势指标
热门文章
- 迭代器模式(三):销售管理系统中数据的遍历的迭代器模式解决方案
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区...
- 如何诊断修正17883,17884,17887,17888错误
- Error: Could not find a version that satisfies the requirement
- 中国移动取消话费有效期 其他运营商或跟进
- 什么是iMessage苹果推信?
- 书论10 王羲之《题卫夫人<笔阵图>后》
- 有大佬知道 淘宝 top sign怎么算吗(解决了)
- 南京邮电大学电工电子(数电)实验报告——动态显示电路 存储器的应用
- TEMU联盟计划用意何在?做推广达人真的能收入满满吗?