Android PdfDocument.Page – Problemas con el tamaño de la imagen

Estoy experimentando problemas con imágenes que son más grandes al dibujar en un PdfDocument.Page. La aplicación está dirigida a un dispositivo que ejecute Android 4.4.4 (API nivel 19).

Estoy generando un documento pdf y agregando una imagen como sigue:

PdfDocument document = new PdfDocument(); //Create an A4 sized page 595 x 842 in Postscript points. PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create(); PdfDocument.Page page = document.startPage(pageInfo); Canvas canvas = page.getCanvas(); Bitmap logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.pdf_logo); Log.i(Consts.LOG_TAG, "pdf canvas density = " + canvas.getDensity()); Log.i(Consts.LOG_TAG, "pdf UOD logo density = " + logo.getDensity()); canvas.drawBitmap(logo, 50, 50, null); document.finishPage(page); /* document is written out to a FileOuputStream(). Details omitted. */ 

El documento está escrito correctamente, y el otro texto que he rendido usando el método de Canvas.drawText () parece muy bien.
Sin embargo, la imagen dibujada es siempre demasiado grande en el documento pdf.

He comprobado la densidad de la imagen y el lienzo son los mismos. La imagen (pdf_logo.jpg) es:
– 160 ppp
– 160 x 160 píxeles físicos en resolución.
– Así que es de 1 pulgada x 1 pulgada de tamaño.

Los registros del código anterior también devuelven lo siguiente:

04-22 11: 55: 50.607: I / App (7856): pdf densidad de lienzo = 160
04-22 11: 55: 50.607: I / App (7856): pdf densidad de logotipo UOD = 160

Esto muestra que la imagen dpi también coincide con la densidad de lienzo. Sin embargo, cuando la imagen se dibuja en el documento pdf, la imagen es mucho más grande que 1 pulgada x 1 pulgada. Es casi el doble del tamaño, un poco más de 2 pulgadas x 2 pulgadas.

Mi sospecha es que Android ha usado la resolución física de la imagen (160 x 160) y la ha convertido en las unidades de tamaño PdfDocument.Page, puntos Postscript que son 1/72 de pulgada. Así que 160 puntos Postscript equivale a 2,2 pulgadas ~ doble del tamaño de la imagen original (1 x 1 pulgada).

Si redujo a la mitad el tamaño de la imagen, entonces obtengo pixelación, ya que efectivamente estará dibujando una imagen de 0,5 x 0,5 pulgadas en un espacio de 1 x 1 pulgada.

Me gustaría saber cómo puedo dibujar una imagen como tamaño real en un PdfDocument.Page, sin tener estos problemas de escala / tamaño.

Como se solicitó, la solución que encontré fue establecer la densidad a un valor superior a lo que debería ser. Ajustar la densidad de mapa de bits a DENSITY_XHIGH en lugar de DENSITY_HIGH mejoró considerablemente el mapa de bits procesado para mí. El mapa de bits está más cerca del tamaño que esperaría cuando se genera el pdf.

[He copiado tu solución a una respuesta. Si ha encontrado una solución, cree una respuesta y acepte usted mismo]

He tratado de establecer la densidad de mapa de bits a un valor superior a lo que creo que debería ser: logo.setDensity(DisplayMetrics.DENSITY_XHIGH); Y esto hizo el truco. (Yo originalmente lo configuró a DENSITY_HIGH, pero todavía estaba escalando la imagen un poco, así que cambié a DENSITY_XHIGH .)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.