2011-11-13 15 views
10

Ad esempio, desidero un bordo bianco di 10 pixel attorno ai 4 lati della bitmap. Non lo sto usando per imageview Attualmente sto usando questo codice per ritagliare l'immagine. Posso sapere come aggiungere un bordo bianco?Come creare un bordo bianco attorno alla bitmap?

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; 
} 

risposta

13

Come per un modo di fare questo. Rendi la tua bitmap più grande di quella che aggiungi ad essa e quindi riempi la tela con lo sfondo che desideri. Se è necessario aggiungere altri effetti, è possibile esaminare le opzioni della tela per ritagliare il rettangolo e aggiungere angoli arrotondati e così via.

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

non funzionante. il bordo bianco dell'immagine non appare sul 4 lato. solo un bordo per la parte superiore e inferiore – ericlee

+2

bene hai l'idea di base giocare con le dimensioni targetRect e bitmap per ottenere l'effetto desiderato. – caguilar187

0

Un modo super facile di farlo sarebbe quello di impostare lo sfondo ImageView al bianco e aggiungere un valore di riempimento.

Se ciò non funziona, creare un FrameLayout con w/h di wrap_content, impostare lo sfondo su bianco, inserire ImageView e impostare i margini di ImageView sulla larghezza del bordo desiderata.

+1

bitmap, non si utilizza per imageview ... – ericlee

0

La sua non è elegante, ma si può sempre e solo disegnare un rettangolo dietro di esso, hai già il codice per fare questo e qualsiasi impatto sulle prestazioni sta per essere impercettibile

+0

ciao, mi puoi mostrare come è stato fatto? sto cercando di capire come disegnare un bianco recntage bg – ericlee

+0

È che si desidera un bordo attorno a un bitmap quadrato? Se è così basta disegnare un'altra bitmap quadrata dietro di esso – Chris

+0

in grado di mostrarmi come? – ericlee

0

È possibile creare il targetRectangle 20px più ampia e 20px alto

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

e dipingere lo sfondo bianco

+0

che lo utilizza per la mappa itemoverlay richiede bitmap – ericlee

1

È possibile disegnare 4 rettangoli dopo aver dipinto il materiale della bitmap.

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

Ho scritto una funzione per questo:

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; 
} 

Fondamentalmente si crea un nuovo Bitmap l'aggiunta di 2 * bordersize di ogni dimensione e poi dipinge il bitmap originale su di esso, compensando con bordersize.

+2

Funziona quando la dimensione dell'immagine è superiore alla dimensione dell'immagine visualizzata e il metodo normale per i bordi con sfondo e riempimento non riesce poiché alcune parti sono eccessivamente riempite rispetto alle altre. Questo metodo è perfetto. complimenti. –

0

Prova questa sarà anche aggiungere confine con la tua tela

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); 
Problemi correlati