Bitmapshader y canvas.scaling android

¿Alguien tiene una pista o explicación para el siguiente problema? Dibujo un camino con un bitmapshader. Cuando el lienzo no está escalado, se ve bien (primera imagen). Cuando hago escala en (acercamiento) el bitmapshader no es escalado y se ve muy feo. He intentado varias cosas con la recreación de la bitmapshader después de acercar, pero no tuvo éxito 🙁 ¿Alguien tiene una pista?

No Scaling se ve bien:

Introduzca aquí la descripción de la imagen

Cuando la escala que se ve feo:

Introduzca aquí la descripción de la imagen

Código:

canvas.scale(scalex, scaley); canvas.translate(itranslatex, itranslatey); fillBMP = makePatternCross(fscalex, 1, Color.GREEN/*,fscalex,fscaley*/); fillBMPshader = new BitmapShader(fillBMP, BitmapShader.TileMode.REPEAT, BitmapShader.TileMode.REPEAT); paintshader = new Paint(); paintshader.setShader(fillBMPshader); canvas.drawPath(cpath.path, paintshader); private static Bitmap makePatternCross(float fSize, float fStrokewith,int iColor) { Log.v("Create Patter makePatternCross","makePatternCross"); float fBitmapSizeOrig = 10; fBitmapSizeOrig=fBitmapSizeOrig*fSize; Bitmap bm = Bitmap.createBitmap((int)fBitmapSizeOrig,(int) fBitmapSizeOrig,Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bm); //c.scale(200, 200); c.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(iColor); //p.setStrokeWidth(iStrokewith); p.setStrokeWidth(fStrokewith/fSize); p.setStrokeWidth((float) 0.000001); c.drawLine(0, 0, fBitmapSizeOrig, fBitmapSizeOrig, p); c.drawLine(0, fBitmapSizeOrig, fBitmapSizeOrig, 0, p); if (fSize != 1) { int iNewSize = (int) (( fBitmapSizeOrig) * fSize); bm = Bitmap.createScaledBitmap(bm, iNewSize, iNewSize, false); } int width = bm.getWidth(); int height = bm.getHeight(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (bm.getPixel(x, y) == Color.WHITE) { bm.setPixel(x, y, Color.TRANSPARENT); } else { // bm.setPixel(x, y, bm.getPixel(x, y)); } } } return bm; } 

No estoy seguro exactamente si esto es lo que buscas. Pero si utiliza una matriz para escalar el mapa de bits, conserva más calidad que la escala normal.

 Matrix matrix = new Matrix(); matrix.postScale(desiredScale, desiredScale); Bitmap scaledBitmap = Bitmap.createBitmap(sampledSrcBitmap, 0, 0, sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true); 

También cuando va de una resolución menor a una más alta puede probar esto también:

 Options options = new BitmapFactory.Options(); options.inScaled = false; Bitmap source = BitmapFactory.decodeResource(a.getResources(), path, options); 
  • ¿Cómo dibujo texto en negrita en un mapa de bits?
  • ¿Definir un estilo de pintura, color, etc en XML?
  • Paint.setAntiAlias ​​(false) no tiene efecto?
  • Android cómo dibujar la pintura en mano libre en MapView con superposición?
  • Dibujar líneas peródicamente
  • Cómo crear este tipo de pincel para pintar en android
  • ¿Cómo evitar que drawBitmap de Android sólo dibuje imágenes en negro?
  • Obtener la altura del texto incluyendo el tamaño de fuente y establecer esa altura
  • Asegúrese de que el área del mapa de bits sea transparente al tocar
  • Android Paint setShadowLayer () ignora el color de su Paint
  • ¿Comportamiento diferente para FillType.EVEN_ODD al agregar un CornerPathEffect?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.