Usando un po 'di matematica, ho creato la seguente funzione java, per inserire una bitmap, e ritagliare un quadrato centrato in cui un cerchio è ritagliato con un bordo nero attorno ad esso . Il resto del quadrato dovrebbe essere trasparente. In aggiunta, c'è una distanza trasparente ai lati per non danneggiare l'anteprima quando si invia l'immagine tramite Messengers.L'immagine ritagliata abbassa la qualità e il bordo appare sfortunato
Il codice della mia funzione è la seguente:
public static Bitmap edit_image(Bitmap src,boolean makeborder) {
int width = src.getWidth();
int height = src.getHeight();
int A, R, G, B;
int pixel;
int middlex = width/2;
int middley = height/2;
int seitenlaenge,startx,starty;
if(width>height)
{
seitenlaenge=height;
starty=0;
startx = middlex - (seitenlaenge/2);
}
else
{
seitenlaenge=width;
startx=0;
starty = middley - (seitenlaenge/2);
}
int kreisradius = seitenlaenge/2;
int mittx = startx + kreisradius;
int mitty = starty + kreisradius;
int border=2;
int seitenabstand=55;
Bitmap bmOut = Bitmap.createBitmap(seitenlaenge+seitenabstand, seitenlaenge+seitenabstand, Bitmap.Config.ARGB_8888);
bmOut.setHasAlpha(true);
for(int x = 0; x < width; ++x) {
for(int y = 0; y < height; ++y) {
int distzumitte = (int) (Math.pow(mittx-x,2) + Math.pow(mitty-y,2)); // (Xm-Xp)^2 + (Ym-Yp)^2 = dist^2
distzumitte = (int) Math.sqrt(distzumitte);
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = (int)Color.red(pixel);
G = (int)Color.green(pixel);
B = (int)Color.blue(pixel);
int color = Color.argb(A, R, G, B);
int afterx=x-startx+(seitenabstand/2);
int aftery=y-starty+(seitenabstand/2);
if(x < startx || y < starty || afterx>=seitenlaenge+seitenabstand || aftery>=seitenlaenge+seitenabstand) //seitenrand
{
continue;
}
else if(distzumitte > kreisradius)
{
color=0x00FFFFFF;
}
else if(distzumitte > kreisradius-border && makeborder) //border
{
color = Color.argb(A, 0, 0, 0);
}
bmOut.setPixel(afterx, aftery, color);
}
}
return bmOut;
}
Questa funzione funziona bene, ma ci sono alcuni problemi che si verificano che non ero in grado di risolvere ancora.
- La qualità dell'immagine è diminuito significativamente
- Il confine non è realmente in tondo, ma sembra essere piatta ai bordi dell'immagine (su alcuni dispositivi ?!)
I' d apprezzo qualsiasi aiuto in merito a tali problemi. Devo ammettere che non sono il migliore in matematica e che probabilmente dovrebbe esserci una formula migliore per battere il confine.
+1 per la traduzione –