Android MUPDF阅读器放大模糊优化

2017/11/06 android

Android MUPDF阅读器放大模糊优化

Android MUPDF阅读器放大模糊优化


前言:

问题原因——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).

Search

    Post Directory