es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo dibujar un contorno alrededor de una imagen PNG utilizando JAVA en Android Studio?

Tengo una imagen PNG (con fondo transparente) y quiero dibujar un contorno alrededor de sus píxeles visibles solamente. (Ver ejemplo GIF adjunto). Quiero hacer todo esto en JAVA.

He leído muchas preguntas y respuestas en Stack Overflow y en la web, pero no encontré nada que se acerque a mis requisitos.

P.D: No tenemos que dibujar la misma imagen dos veces en el lienzo y usar la de abajo como contorno, así que por favor, no propongan esas soluciones.

P.P.D: Sería genial si esta solución me permite dibujar un contorno alrededor de todos los objetos/elementos visibles (imágenes y textviews, etc.) dentro de un lienzo o de un layout. contorno de una imagen png en Android Canvas

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para dibujar un contorno alrededor de los píxeles visibles de una imagen PNG en JAVA, podemos utilizar una combinación de Bitmap, Canvas y Paint. Aquí están los pasos para lograr esto:

    1. Cargar la imagen PNG en un objeto Bitmap utilizando el método BitmapFactory.decodeResource().
    Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.myImage);
    
    1. Crear un nuevo objeto Bitmap con las mismas dimensiones que la imagen original pero con un color transparente. Esto se utilizará como el bitmap de destino.
    Bitmap outline = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.Config.ARGB_8888);
    outline.eraseColor(Color.TRANSPARENT);
    
    1. Crear un nuevo objeto Canvas con el bitmap del contorno como destino.
    Canvas canvas = new Canvas(outline);
    
    1. Dibujar la imagen original en el canvas utilizando el método drawBitmap().
    canvas.drawBitmap(image, 0, 0, null);
    
    1. Crear un nuevo objeto Paint con el color del contorno deseado y ancho de trazo.
    Paint outlinePaint = new Paint();
    outlinePaint.setColor(Color.RED);
    outlinePaint.setStyle(Paint.Style.STROKE);
    outlinePaint.setStrokeWidth(4);
    
    1. Iterar a través de todos los píxeles de la imagen original y utilizar el objeto Paint para dibujar un contorno alrededor de cada píxel visible.
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {
            int pixel = image.getPixel(x, y);
            if (Color.alpha(pixel) != 0) { // Solo dibujar contorno alrededor de los píxeles visibles
                canvas.drawPoint(x, y, outlinePaint);
            }
        }
    }
    
    1. El bitmap outline ahora contiene la imagen original con un contorno alrededor de sus píxeles visibles. Puedes mostrarlo en un ImageView o guardarlo en un archivo utilizando el método compress().
    imageView.setImageBitmap(outline);
    

    Para dibujar un contorno alrededor de todos los objetos/elementos visibles en un canvas o dentro de un diseño, podemos seguir un enfoque similar donde dibujamos cada objeto en un bitmap separado, los combinamos en un solo bitmap y luego aplicamos el algoritmo de contorno descrito anteriormente. El principal desafío aquí sería determinar los límites de cada objeto y extraer sus datos de píxeles. Esto requeriría un conocimiento detallado sobre la estructura del diseño y los objetos que necesitan ser contorneados.

Comments are closed.