Unwanted Warp efecto de dibujo de texto en la ruta android
Hago algunas pruebas de dibujo en el camino. Hice una imagen de fondo mediante la configuración de mapa de bits a lienzo. Entonces, dibujo el texto en la trayectoria a la lona, girada por la matriz. Tengo que acortar el código, sólo publicaré la parte importante, porque es demasiado larga. Estas imágenes que se muestran a continuación se recortan con gimp, así que no te irrites por los diferentes tamaños. Mis objetos Rect, Path y Matrix:
RectF drawTextOval; Path drawTextPath; Matrix mDrawnMatrix;
Ahora, esto es lo que estoy haciendo para dibujar el texto en el camino del círculo:
- Acerca de Android Paint dibujo de color
- ¿Cómo dibujo una flecha (en Android)?
- ¿Cómo crear un bucle de actualización / dibujo apropiadamente con opengl android?
- Acceso rápido y manipulación de píxeles android
- Trazado de dibujo de Android
drawTextOval.set(drawTextPosX - drawTextArc, drawTextPosY - drawTextArc, drawTextPosX + drawTextArc, drawTextPosY + drawTextArc); drawTextPath.addArc(drawTextOval, 0, 360); drawTextPath.computeBounds(drawTextOval, true); mDrawnMatrix.postRotate(drawTextArcStart, (drawTextOval.right + drawTextOval.left) / 2, (drawTextOval.bottom + drawTextOval.top) / 2); drawTextPath.transform(mDrawnMatrix); patternCanvas.drawTextOnPath(drawText, drawTextPath, 0, 0, mFixedTextPaint);
Hasta este punto, todo se ve bien:
Pero después de guardar toda la pantalla, el texto girado parece deformado en la imagen .png guardada. Todos los demás componentes se ven bien. Hice algunos otros dibujos con texto, lineal o angular, todo esto funciona. Incluso algunos .png mapas de bits de dibujo a la lona y la imagen de fondo … todo está mirando normalmente. Pero el texto en el camino del círculo dibujado se ve así:
No hago ninguna escala en el mapa de bits, sólo guardar la imagen de lienzo con:
FileOutputStream fos = new FileOutputStream(saveFile); this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = this.getDrawingCache(); bitmap.compress(CompressFormat.PNG, 100, fos); fos.flush(); fos.close();
¿Por qué el texto parece deformado? ¿Alguien ha visto mi error? Gracias por adelantado….
EDITAR
He probado algunas cosas y averiguar que establecer anyDensity a false o desactivar la aceleración de hardware en Manifest mostrará el efecto en tiempo de ejecución antes de guardar. Eso me sugiere, que al guardar bitmap con getDrawingCache (), la escala está desactivada en este momento. ¿Pero por qué?
Lo último que descubrí, que cuanto más baja es la curvatura, más baja es la escala del texto. Si el texto es un poco curvado, parece bueno.
- Android cómo dibujar un rect rectangular y sombra Layout
- Temporizador de rectángulo de dibujo de Android con animación
- Android - Corte de desplazamiento de pantalla en vivo
- Android dibujar con desenfoque
- Android: trazado de dibujo como superposición en MapView
- Anular onDraw () o draw ()?
- Personalizar una ProgressBar para convertirse en un termómetro
- Android: calidad de las imágenes redimensionadas en tiempo de ejecución
Intento establecer el
this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
antes de dibujar a pantalla, ya que una menor calidad podría implicar una transformación más simple del texto. Esto es sólo adivinar, por supuesto. Actualmente su único ajuste de la alta calidad antes de escribir en el disco. O simplemente eliminarlo del método write to disk para comprobar si afecta la forma en que se dibuja el texto.
- Android setBackgroundResource causa excepción de la memoria
- Draw Rectangle Over ImageView para resaltar que puede ser zoom in-out en android