I'm using PdfRenderer
above api 21 to display pdf in my app and I noticed that the quality of pages is very poor.
I followed also google sample to use PdfRenderer
and this is how I create Bitmap
for page:
//mCurrentPage is a PdfRenderer.Page and mImageView is an ImageView
Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(),
mCurrentPage.getHeight(),
Bitmap.Config.ARGB_8888);
mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
mImageView.setImageBitmap(bitmap);
I used ARGB_8888
because as far as I know, it's the best quality to display bitmaps.
Am i doing something wrong?
EDIT
This is the huge difference between PdfRenderer class and a classic Pdf reader:
ARGB_8888` is for color quality only but the printing/displaying quality is related to the resolution (how much dots per inch you have when displaying on screen).
For example, if you have 400 DPI screen (400 Dots Per Inch) and want to display PDF with this quality then you should render the bitmap via Bitmap.createBitmap() that takes pixels as its sizes:
Bitmap bitmap = Bitmap.createBitmap(
getResources().getDisplayMetrics().densityDpi * mCurrentPage.getWidth() / 72,
getResources().getDisplayMetrics().densityDpi * mCurrentPage.getHeight() / 72,
Bitmap.Config.ARGB_8888
);
where:
getResources().getDisplayMetrics().densityDpi
is the target DPI resolutionmCurrentPage.getWidth()
returns width in Postscript points, where each pt
is 1/72 inch.Hence, diving #2 by 72 we get inches and multiplying by DPI we get pixels. In other words to match the quality of the printing device of the display you should increase the size of the image rendered as default PDF resolution is 72 DPI. Please also check this post?