2011-11-13 37 views
10

Por ejemplo, quiero un borde blanco de 10 píxeles alrededor de los 4 lados del mapa de bits. No lo estoy usando para la vista de imagen Actualmente estoy usando este código para recortar la imagen. ¿Puedo saber cómo podría agregar un borde blanco en él?¿Cómo crear un borde blanco alrededor de mapa de bits?

public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) { 
    int sourceWidth = source.getWidth(); 
    int sourceHeight = source.getHeight(); 

    // Compute the scaling factors to fit the new height and width, respectively. 
    // To cover the final image, the final scaling will be the bigger 
    // of these two. 
    float xScale = (float) newWidth/sourceWidth; 
    float yScale = (float) newHeight/sourceHeight; 
    float scale = Math.max(xScale, yScale); 

    // Now get the size of the source bitmap when scaled 
    float scaledWidth = scale * sourceWidth; 
    float scaledHeight = scale * sourceHeight; 

    // Let's find out the upper left coordinates if the scaled bitmap 
    // should be centered in the new size give by the parameters 
    float left = (newWidth - scaledWidth)/2; 
    float top = (newHeight - scaledHeight)/2; 

    // The target rectangle for the new, scaled version of the source bitmap will now 
    // be 
    RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight); 

    // Finally, we create a new bitmap of the specified size and draw our new, 
    // scaled bitmap onto it. 
    Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig()); 
    Canvas canvas = new Canvas(dest); 
    canvas.drawBitmap(source, null, targetRect, null); 

    return dest; 
} 

Respuesta

13

en cuanto a una manera de hacer esto. Haces que tu mapa de bits sea más grande que el que agregas y luego llenas el lienzo con el fondo que deseas. Si necesita agregar otros efectos, puede buscar en las opciones de lienzo para recortar el rect y agregar esquinas redondeadas, etc.

RectF targetRect = new RectF(left+10, top+10, left + scaledWidth, top + scaledHeight); 
Bitmap dest = Bitmap.createBitmap(newWidth+20, newHeight+20, source.getConfig()); 
Canvas canvas = new Canvas(dest); 
canvas.drawColor(Color.WHITE); 
canvas.drawBitmap(source, null, targetRect, null); 
+0

no funcione. el borde blanco de la imagen no aparece en 4 lados. solo un borde para la parte superior e inferior – ericlee

+2

, así tiene la idea básica de jugar con el objetivo y el tamaño del mapa de bits para obtener el efecto que desea. – caguilar187

0

Una manera super fácil de hacerlo sería establecer el fondo ImageView en blanco y agregar un valor de relleno.

Si eso no funciona, cree un FrameLayout con w/h de wrap_content, establezca su fondo en blanco, coloque ImageView allí y establezca los márgenes de ImageView en el ancho del borde deseado.

+1

mapa de bits, no utilizando para imageview ... – ericlee

0

No es elegante, pero siempre se puede simplemente dibujar un rectángulo detrás de él, que ya tiene el código para hacer esto y cualquier impacto en el rendimiento va a ser imperceptible

+0

hola, me puede mostrar cómo se está haciendo? Estoy tratando de averiguar cómo dibujar una ventaja blanca. – ericlee

+0

¿Es que quieres un borde alrededor de un mapa de bits cuadrado? Si es así, simplemente dibuja otro mapa de bits cuadrado detrás de él. – Chris

+0

puede mostrarme cómo hacerlo. – ericlee

0

Usted puede crear su targetRectangle 20 píxeles más ancho y 20 píxeles más alta

RectF targetRect = new RectF(left, top, left + scaledWidth + 20, top + scaledHeight + 20); 

y pintar el fondo blanco

+0

usándolo para el mapa itemoverlay requiere que el mapa de bits – ericlee

1

Puede dibujar 4 rectángulos después de pintar las cosas de su mapa de bits.

point 0,0,3,sizey 
point 0,0,sizex,3 
point 0,sizey-3,sizex,sizey 
point sizex-3,0,sizex,sizey 
50

escribí una función para esto:

private Bitmap addWhiteBorder(Bitmap bmp, int borderSize) { 
    Bitmap bmpWithBorder = Bitmap.createBitmap(bmp.getWidth() + borderSize * 2, bmp.getHeight() + borderSize * 2, bmp.getConfig()); 
    Canvas canvas = new Canvas(bmpWithBorder); 
    canvas.drawColor(Color.WHITE); 
    canvas.drawBitmap(bmp, borderSize, borderSize, null); 
    return bmpWithBorder; 
} 

Básicamente se crea un nuevo mapa de bits añadiendo 2 * bordersize a cada dimensión y luego pinta el mapa de bits original sobre ella, compensando con bordersize.

+2

Esto funciona cuando el tamaño de la vista de la imagen es más alto que el tamaño de la imagen mostrada y el método normal para las fronteras con fondo y el relleno falla, ya que algunas partes están sobrellenadas que las otras. Este método es perfecto. prestigio. –

0

Prueba esto también añadirá frontera para su lienzo

canvas.drawLine(0, 0, canvas.getWidth(), 0, paint2); 
     canvas.drawLine(0, 0, 0, canvas.getHeight(), paint2); 
     canvas.drawLine(0, canvas.getHeight(), canvas.getWidth(), 
       canvas.getHeight(), paint2); 
     canvas.drawLine(canvas.getWidth(), 0, canvas.getWidth(), 
       canvas.getHeight(), paint2); 
Cuestiones relacionadas