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阅读器放大模糊优化相关推荐

  1. 基于Android的看小说APP源码Android本科毕业设计Android小说阅读器、小说APP源码

    基于kotlin + 协程 + MVVM 模式来编写的看小说APP. 完整代码下载地址:基于Android的看小说APP源码Android本科毕业设计Android小说阅读器.小说APP源码 主要框架 ...

  2. Android小说阅读器

    这是早期做的一个 android小说阅读器项目,是本地阅读器,没有联网功能,目前只支持txt格式. 但项目功能是比较齐全的: 文件预览 导入书籍 创建分类 批量管理书架上的图书 小说阅读 查看书籍目录 ...

  3. chrome pdf android,Android PDF阅读器 (基于谷歌平台的Adobe Reader)

    Android PDF阅读器 (基于谷歌平台的Adobe Reader):Adobe Reader 是用于打开和使用在 Adobe Acrobat 中创建的 Adobe PDF 的工具. 虽然无法在 ...

  4. Android电子书阅读器的设计与实现

    Android电子书阅读器 包括Android客服端和jsp服务端 主要有,在线图书,本地图书,用户设置,书签管理,JSP后台,可以管理用户帐号,图书信息管理 我的QQ 609085431

  5. Android电子书阅读器小程序(txt)

    Android电子书阅读器小程序(txt) 开发环境 JDK 1.8 操作系统 Windows×32位或64位 可行性分析 技术可行性: 本项目应用的均是上课所学习的内容. 软件可行性: 用平时学习的 ...

  6. Android 文本阅读器源代码 学习

    1 来源 http://www.apkbus.com/android-83021-1-1.html 从这个地方下载了一个android 文本阅读器,比较简单,稍微分析以下. 2 代码不是很难,记录以下 ...

  7. android rss阅读器实现

    android rss阅读器实现 http://www.cnblogs.com/leipei2352/archive/2011/09/07/2170096.html

  8. Android MuPDF 阅读PDF文件

    MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...

  9. 记一个简单Android图书阅读器的制作过程

    记一个简单图书阅读器的制作过程 微澜 2018/9/27 qq:9611153 从有个想法,到到一个可用程序,断断续续几个月,花上不少的功夫,即便是简单的程序一个人写下来也是很难的.越写越是发现,想要 ...

最新文章

  1. 【c语言】蓝桥杯算法训练 十进制数转八进制数
  2. VC 在CStatic控件上绘图
  3. wxWidgets:wxConfigBase类用法
  4. 1.4 Hive和数据库的比较
  5. ppt文件限打开次数_PPT冷知识25条!看到第一条我就翻了车…
  6. 决胜蓝桥杯python组-集合、字典
  7. 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
  8. putty-不输入密码直接登陆
  9. halcon学习之边缘检测
  10. 认真去做,我会做得很棒!
  11. Java实现俄罗斯方块游戏(简单版)
  12. keras 基础入门整理
  13. [Unity]腾讯SDK踩坑之路(3)--米大师坑 + MSDK坑 (2)
  14. 宅男也可变形男-我是如何在11个月零27天减掉80斤的
  15. java系列 - entity,vo转换
  16. IVMS-5000海康平台安装
  17. 怎么看计算机配置好不好,电脑参数怎么看
  18. win10打开蓝牙_win10蓝牙开关不见了
  19. Linux Panic 机制解析
  20. 小型趋势指标、中型趋势指标和主要趋势指标

热门文章

  1. 迭代器模式(三):销售管理系统中数据的遍历的迭代器模式解决方案
  2. ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区...
  3. 如何诊断修正17883,17884,17887,17888错误
  4. Error: Could not find a version that satisfies the requirement
  5. 中国移动取消话费有效期 其他运营商或跟进
  6. 什么是iMessage苹果推信?
  7. 书论10 王羲之《题卫夫人<笔阵图>后》
  8. 有大佬知道  淘宝 top  sign怎么算吗(解决了)
  9. 南京邮电大学电工电子(数电)实验报告——动态显示电路 存储器的应用
  10. TEMU联盟计划用意何在?做推广达人真的能收入满满吗?